Важно понимать различие между программами и процессами. Скажем, wc
— это программа, но каждый запуск программы wc
создает новый процесс. Если одновременно выполняется несколько экземпляров одной программы, то любой из них считается отдельным процессом с отличным от других номером.
Если конвейер завершается операцией &
$ pr ch * | lpr &
6951
Номер процесса
$
то все процессы этого конвейера начинают выполняться сразу, и &
относится ко всем программам, участвующим в конвейере. Однако выдается только номер процесса, относящийся к последней программе в конвейере. Команда
$ wait
ожидает, пока не завершатся все процессы, запущенные с помощью &
. Если она не возвращается сразу, значит, у вас есть незавершенные команды. Прервать выполнение команд можно, нажав клавишу DELETE .
Можно использовать номер процесса, сообщаемый интерпретатором, для остановки процесса, инициированного операцией &
:
$ 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)
.
Процессы, подобно файлам, имеют иерархическую структуру: у каждого процесса есть родитель и могут быть потомки. Ваша копия интерпретатора shell
была создана процессом, обслуживающим связь через терминал с системой. Когда вы запускаете команды, их процессы становятся прямыми потомками вашей копии shell
. Если вы запускаете программу "внутри" одной из этих команд, например команду '!'
для выхода из редактора ed
, то создается новый процесс-потомок, который является, таким образом, уже внуком для shell
.
Иногда процесс выполняется столь долго, что вы уже жалеете, что запустили его. Выключите терминал и идите домой, не дожидаясь его окончания. Но если вы выключите терминал или отсоедините его от сети, то процесс будет уничтожен, даже если применен &
. Специально для такого случая предусмотрена команда nohup
("no hangup" — без отбоя).
Введите
$ nohup команда &
и команда будет продолжать выполняться, даже если выйти из системы. Любой результат выполнения команды будет сохранен в файле, называемом nohup.out
. После запуска программы никакая команда nohup
уже не поможет.
Если ваш процесс требует много процессорного времени, вы можете облегчить участь тех, кто работает вместе с вами, запустив его с приоритетом ниже обычного. Это можно сделать с помощью программы nice
:
$ nice большая-команда &
Команда nohup
автоматически вызывает nice
, поскольку раз уж вы собираетесь выйти из системы, то можете позволить, чтобы ваша команда выполнялась дольше.
Наконец, вы можете дать указание системе запустить ваш процесс в необычное время, скажем, утром, когда все нормальные люди снят, а не работают на машине. Команда называется at(1)
:
$ at
время любые команды
какие угодно...
ctl-d
$
Это пример типичного использования команды at
, но, конечно, команды можно брать и из файла:
$ at 3am < файл
$
Время можно задавать исходя из 24-часового цикла как 2130
или 12-часового как 930pm
.
Создание среды
Одним из достоинств системы UNIX является то, что вы можете легко адаптировать ее по своему вкусу либо в соответствии с местными традициями программистского мира. Например, как отмечалось выше, существуют разные стандарты для символов стирания и удаления; по умолчанию используются #
и @
. Вы можете изменить их в любой момент с помощью команды
Читать дальше
Конец ознакомительного отрывка
Купить книгу