Сообщения же об ошибках, выдаваемые командами, следует обрабатывать по-другому, иначе они затеряются в файле или программном канале. Поэтому каждая команда имеет еще один стандартный файл, называемый файлом диагностики, который обычно связан с вашим терминалом:
Почти все рассматривавшиеся выше команды укладываются в эту схему; исключение составляют who
и date
, не имеющие входной информации, а также те, например cmp
или diff
, которые имеют определенное число входных файлов. (Посмотрите их флаг '-'
.)
Объясните разницу между командами
$ who | sort
и
$ who sort
Интерпретатор shell
выполняет и некоторые другие операции, помимо связывания через программный канал. Рассмотрим кратко вопрос одновременного выполнения нескольких программ, о чем уже упоминалось при обсуждении программных каналов. Например, можно запустить две команды с помощью одной командной строки, разделив их точкой с запятой; интерпретатор shell
распознает этот символ и разобьет строку на две команды:
$ date; who
Tue Sep 27 01:03:17 EDT 1983
ken tty0 Sep 27 00:43
dmr tty1 Sep 26 23:45
rob tty2 Sep 26 23:59
bwk tty3 Sep 27 00:06
jj tty4 Sep 26 23:31
you tty5 Sep 26 23:04
her tty7 Sep 26 23:34
Обе команды будут выполнены (подряд) прежде, чем интерпретатор вновь вернется с приглашением.
Можно также при желании запустить несколько команд одновременно. Предположим, что вы собираетесь заняться длительными вычислениями, например, подсчитать число слов в вашей книге, но не хотите ждать окончания команды wc
для перехода к другой работе. Тогда можно задать:
$ wc ch* wc.out
6944
Shell дает номер процесса
$
Амперсанд () в конце командной строки указывает интерпретатору, что нужно запустить данную команду, а затем сразу перейти к получению последующих команд с терминала, т.е. не ждать ее завершения. Итак, команда будет выполняться, а вы можете отвлечься на что-нибудь другое. Переключение выходного потока на файл
wc.out
предотвращает возможность его смешивания с той информацией, которая появится на терминале в процессе дальнейшей работы.
Каждый экземпляр запущенной программы называется shell
в ответ на команду, введенную с , является номером процесса. Его можно использовать в других командах в качестве ссылки на данный экземпляр выполняемой программы.
Важно понимать различие между программами и процессами. Скажем, wc
— это программа, но каждый запуск программы wc
создает новый процесс. Если одновременно выполняется несколько экземпляров одной программы, то любой из них считается отдельным процессом с отличным от других номером.
Если конвейер завершается операцией
$ pr ch * | lpr
6951
Номер процесса
$
то все процессы этого конвейера начинают выполняться сразу, и относится ко всем программам, участвующим в конвейере. Однако выдается только номер процесса, относящийся к последней программе в конвейере. Команда
$ wait
ожидает, пока не завершатся все процессы, запущенные с помощью . Если она не возвращается сразу, значит, у вас есть незавершенные команды. Прервать выполнение команд можно, нажав клавишу
Можно использовать номер процесса, сообщаемый интерпретатором, для остановки процесса, инициированного операцией :
$ kill 6944
Если вы забыли номер процесса, команда ps
выведет сообщение обо всех ваших процессах. В том случае, когда вам некогда, команда kill 0
уничтожит все ваши процессы, за исключением начального процесса-интерпретатора. Если же вам интересно, что делают другие пользователи, команда ps -ag
сообщит обо всех выполняемых процессах. Приведем пример вывода:
$ ps -ag
PID TTY TIME CMD
36 со 6:29 /etc/cron
6423 5 0:02 -sh
6704 1 0:04 -sh
6722 1 0:12 vi paper
4430 2 0:03 -sh
6612 7 0:03 -sh
6628 7 1:13 rogue
6643 2 0:02 write dmr 6949 4 0:01 login bimmler
6952 5 0:08 pr ch1.1 ch1.2 ch1.3 ch1.4
6951 5 0:03 lpr
6959 5 0:02 ps -ag
6844 1 0:02 write rob
$
Здесь PID
— номер процесса; TTY
— терминал, связанный с процессом (как в команде who
); TIME
— затраченное время процессора в минутах и секундах, а в конце строки — выполняемая команда. Команда ps
— одна из тех команд, которые выполняются по- разному в различных версиях системы, так что вывод в вашей системе может иметь другой формат. Даже аргументы могут отличаться — см. в своем справочном руководстве страницу ps(1)
.