воскресенье, 9 декабря 2012 г.

Полезные shell команды


Nohup

Запуск процесса в фоновом режиме с игнорированием к сигналу HUP, чтобы процесс мог продолжать свою работу, после того как пользователь выйдет из системы.

nohup <command> &

nohup — UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (hangup)таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы. Если стандартным выводом (stdout) команды является терминал, то он и стандартный поток диагностики (stderr) перенаправляются с добавлением в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не запускается совсем.
При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.
nohup не переводит автоматически команду в фоновый режим; пользователь должен сделать это явным образом, завершив командную строку символом «&».

Работа с сигналами


При должной поддержке со стороны демона, данный сигнал заставит демон перечитать свой конфиг и адаптироваться к изменениям без перезапуска

kill -n HUP <PID>

Временная остановка процесса:

Выполняется с помощью отправки сигнала stop:

kill -s STOP 1313, где 1313 PID процесса


после чего в выводе утилиты ps в поле STAT описывающее текущее состояние процесса он засветится как T

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

tsyrenov  1214  0.0  0.0  73360  1796 ?        S    23:06   0:00 sshd: tsyrenov@pts/1
tsyrenov  1215  0.0  0.3  26256  7516 pts/1    Ss+  23:06   0:00 -bash
tsyrenov  1313  0.4  0.1  14616  2200 pts/1    T    23:06   0:02 watch -n0 date


Возобновление работы приостановленного процесса можно выполнить отправкой сигнала CONT

kill -s CONT 1313

но надо помнить что не все процессы смогут безболезненно восстановить приостановленную ранее работу, например при ситуации когда установленные процессом сетевые соединения за время простоя закрылись по таймауту.

Гарантированное уничтожение процесса

kill -s KILL <PID>

Уничтожение процесса с созданием дампа памяти

kill -s SEGV <PID>

Nice, renice

Запуск процесса с понижением приоритета на право доступа к cpu (чем выше значение, тем ниже приоритет). Возможный диапазон значений от +20 до -19.

nice -n '12' bash

процесс был запущен из под рядового пользователя у которого по умолчанию есть права только на понижение приоритета, но не на повышение. В выводе утилиты ps с ключом lax, данный процесс в поле NI отображающего фактор уступчивости засветится значением 12

F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND

5  1000 19138 19006  20   0  73360  1788 poll_s S    ?          0:00      \_ sshd: tsyrenov@pts/1
0  1000 19139 19138  20   0  26256  7520 wait   Ss   pts/1      0:00          \_ -bash
0  1000 19238 19139  32  12  22816  3972 n_tty_ SN+  pts/1      0:00              \_ bash

вся дальнейшая работа из под такого shell'а будет выполнятся с пониженным, унаследованным приоритетом 12.

Уже работающим процессам на лету изменить приоритет можно с помощью renice.

Из под пользователя root мы можем на лету изменить приоритет в любую сторону

root@srv:~# renice -22 19238
19238 (process ID) old priority 12, new priority -20

Видим что приоритет у процесса поднялся до -20

5  1000 19138 19006  20   0  73360  1788 poll_s S    ?          0:00      \_ sshd: tsyrenov@pts/1
0  1000 19139 19138  20   0  26256  7520 wait   Ss   pts/1      0:00          \_ -bash
0  1000 19238 19139   0 -20  22816  4072 n_tty_ S<+  pts/1      0:00              \_ bash

С ключом -u можно увеличить фактор уступчивости для всех процессов конкретного пользователя

root@srv:~# renice 10 -u tsyrenov
1000 (user ID) old priority -20, new priority 10

4     0 19006   435  20   0  73360  3540 poll_s Ss   ?          0:00  \_ sshd: tsyrenov [priv]
5  1000 19138 19006  30  10  73360  1788 poll_s SN   ?          0:00      \_ sshd: tsyrenov@pts/1
0  1000 19139 19138  30  10  26256  7520 wait   SNs  pts/1      0:00          \_ -bash
0  1000 19238 19139  30  10  22816  4072 wait   SN   pts/1      0:00              \_ bash

Fuser

Для определения процессов использующих те или иные файлы или сокеты, можно воспользоваться утилитой fuser. Fuser полезен при диагностике, например при ситуации когда размонтируемая файловая система занята по причине того что используется какими либо процессами, все эти процессы можно без труда выявить.


root@srv:~# fuser -mv /dev
                     USER        PID ACCESS COMMAND
/dev:                root     kernel swap  /dev/dm-1
                     root     kernel mount /dev
                     root          1 F.... init
                     root        306 F.... upstart-udev-br
                     root        310 F.... udevd
                     root        474 F.... sshd
                     messagebus    482 F.... dbus-daemon
                     root        546 F.... upstart-socket-
                     root        579 F.... udevd
                     root        616 F.... udevd
                     root        746 F.... getty
                     root        757 F.... getty
                     root        776 F.... getty
                     root        778 F.... getty
                     root        784 F.... getty
                     root        796 F.... acpid
                     whoopsie    806 F.... whoopsie
                     root        812 F.... cron
                     daemon      813 F.... atd
                     root        844 F.... getty
                     root        864 F.... sshd

root@srv:~# fuser -mv /run/shm
                     USER        PID ACCESS COMMAND
/run/shm:            root     kernel mount /run/shm




Комментариев нет:

Отправить комментарий