Если процессов слишком много, воспользуйтесь командой grep, указав в ней номер нужного задания:
$ ps | grep 28305
28305 pts/0 00:02:20 psl
Обратите внимание: команда ps не показывает, в каком режиме выполняется задание — в фоновом или экранном.
Сигнал о завершении посылается процессу командой kill:
kill [-сигнал] номер_процесса
Далее в этой книге мы рассмотрим, какие существуют сигналы. Пока же достаточно знать, что по умолчанию команда kill посылает сигнал номер 1 — HUP (hang‑up -oтбой). На экран выводится сообщение о прекращении задания:
$ kill 28305
[1]+ Terminated ./psl
Многие команды и сценарии перехватывают сигнал HUP, поэтому команда kill -1 не уничтожает их. В этом случае нужно воспользоваться командой kill -9, которая посылает процессу сигнал KILL (уничтожить). Этот сигнал не перехватывается и означает безусловное уничтожение процесса.
$ kill -9 28305
[1] + Killed ./psl
3.4. Команда nohup
Задание, выполняющееся в фоновом режиме, уничтожается, когда запустивший его пользователь выходит из системы. Вы можете обеспечить, чтобы после завершения сеанса работы в системе продолжилось автономное выполнение вашего задания. Для этого запустите его с помощью команды nohup. Общий формат этой команды таков:
nohup команда &
По умолчанию все выходные данные задания, запушенного с помощью команды nohup, направляются в файл nohup.out, но можно указать другой файл;
nohup команда > выходной файл 2>&1 &
'Давайте проверим работу команды nohup на примере упомянутого выше сценария psl.
$ nohup psl &
[1] 179
nohup; appending output to 'nohup.out'
Теперь выйдите из интерпретатора shell, выполнив команду logout, снова зарегистрируйтесь и введите следующую команду:
$ ps x | grep psl
30004 ? RN 4:01 sh ./psl
30006 pts/1 S 0:00 grep psl
Опция x предназначена для вывода списка заданий, не связанных с терминалом (обратите внимание на знак вопроса во втором столбце). В третьем столбце указан статус задания. Статус R означает, что процесс выполняется, статус N — это признак снижения
приоритета у выполняемого процесса. В четвертом столбце приведено суммарное время использования процессора. Как видите, сценарий продолжает свою работу.
Если система не поддерживает команду ps x, воспользуйтесь опцией -e, которая предназначена для получения списка всех системных процессов:
$ ps -e | grep psl
30004 ? 00:04:01 sh ./psl
Если необходимо одновременно выполнить несколько команд, можно объединить их в файле сценария, а затем запустить его с помощью команды nohup. Предположим, имеется следующая цепочка команд:
cat /home/acccmnts/qtr_04 99 | /apps/bm/trials.awk | sort | lp
Поместим ее в файл:
$ cat > quarterend
cat /home/accounts/qtr_0499 | /apps/bin/trials.awk | sort | lp
Сделаем файл исполняемым:
$ chmod 744 quarterend
Теперь запустим этот файл в фоновом режиме посредством команды nohup, направив результаты работы сценария в файл qtr.out.
$ nohup ./quarterend > qtr.out 2>&l &
[5] 182
Обратите внимание на то, что при вызове файла quarterend указано путевое имя '. /.' Тем самым интерпретатору shell дается указание искать данную команду в текущем каталоге.
3.5. Заключение
Мы рассмотрели различные способы выполнения заданий в фоновом режиме. Необходимость в этом может возникнуть при пакетном обновлении больших файлов или выполнении сложной операции поиска. Подобную работу лучше не делать в часы пиковой загрузки системы.
Можно создать сценарии, которые автоматически модифицируют журнальные файлы. Вам останется лишь просматривать эти файлы по мере необходимости. Таким образом, программа cron и другие представленные в этой главе команды позволяют существенно упростить администрирование системы.
Подстановка имен файлов
При работе в режиме командной строки довольно много времени уходит на поиск необходимых файлов. Интерпретатор shell предлагает набор метасимволов, позволяющих находить файлы, имена которых соответствуют предложенному шаблону.
Вот список основных метасимволов:
* Соответствует произвольной строке, содержащей ноль и более символов
? Соответствует любому символу
[…] Соответствует любому символу из числа заключенных в скобки
[!…] Соответствует любому символу за исключением тех, которые указаны в скобках