Программа или команда, фактически выполняемая на компьютере, называется процессом. Структура процессов иерархическая. Процесс, запущенный программой или командой, называется родительским; порожденный им процесс - дочерним. У родительского процесса может быть несколько дочерних процессов, однако у каждого дочернего процесса есть только один родительский процесс.
Каждому запускаемому процессу присваивается идентификационный номер (ИД процесса). Если вы несколько раз запускаете одну и ту же программу, то каждый раз ей будет присваиваться уникальный ИД процесса.
После запуска процесс начинает использовать различные системные ресурсы. Если процессов несколько, то встроенный в операционную систему планировщик распределяет время процессора между ними на основании приоритетов процессов. Эти приоритеты можно изменить командами nice и renice.
Примечание: Повысить приоритет процесса может только пользователь с правами доступа root. Пользователь может понизить приоритет запускаемого процесса командой nice, а уже запущенного процесса - командой renice.
В этом разделе приведена информация по следующим темам:
Процессы, запускаемые пользователем и требующие его вмешательства, называются интерактивными. Процессы, выполняемые независимо от пользователя, называются фоновыми. По умолчанию программы и команды выполняются как интерактивные процессы. Для запуска процесса в фоновом режиме укажите после команды амперсанд (&).
Демоны - это процессы, выполняемые автономно. Они постоянно работают в фоновом режиме.Демоны обычно запускаются одновременно с системой и завершают свою работу вместе с ней. Демон обеспечивает работу системных служб и доступен в каждый момент времени нескольким задачам и пользователям. Демоны запускаются пользователем root или оболочкой root и могут быть завершены только пользователем root. Например, демон qdaemon предоставляет доступ к системным ресурсам (принтерам и т.п.) Другой пример часто используемого демона - sendmail.
Процесс-зомби - это неактивный процесс, который по-прежнему находится в таблице процессов (иными словами, он сохраняет свой ИД процесса). Ему не выделяется системная память. Процессы-зомби - это процессы, которые были прерваны или завершены, но продолжают существовать в таблице процессов до тех пор, не будет завершен родительский процесс или не произойдет перезагрузка системы. Процессы-зомби отмечены словом <defunct> в списке, выдаваемом командой ps.
Для запуска интерактивного процесса на дисплейной станции введите имя программы или команды в командной строке. После запуска интерактивного процесса он будет выдавать сообщения и принимать ваши ответы с дисплейной станции до тех пор, пока не будет завершен. Это означает, что вы не сможете вводить другие команды и выполнять какие-либо действия на этой станции до тех пор, пока процесс не будет завершен или вы не прервете его.
Каждый пользователь может одновременно запустить не более 40 процессов.
Для запуска интерактивного процесса введите команду со всеми необходимыми параметрами и флагами:
$ Имя_команды
Нажмите Enter.
Для запуска процесса в фоновом режиме введите команду со всеми необходимыми параметрами и флагами, поставив в конце амперсанд ( &):
и нажав Enter.
$ Имя_команды&
Если процесс работает в фоновом режиме, то вы можете выполнять другие задачи, вводя команды с дисплейной станции.
Фоновый режим рекомендуется применять в случае, если выполнение команды занимает много времени. Однако следует учесть, что фоновые процессы увеличивают нагрузку на процессор и, как следствие, замедляют работу системы.
Большинство процессов направляют результаты работы в стандартный вывод, даже если они работают в фоновом режиме. По умолчанию стандартный вывод поступает на экран дисплейной станции. Поскольку вывод фонового процесса может помешать выполнению остальных операций, его рекомендуется направлять в файл или на принтер. В этом случае, вы можете просмотреть вывод, когда он вам понадобится.
Примечание: В некоторых случаях порядок вывода процесса в фоновом режиме может быть несколько иным, чем в интерактивном. Обеспечить правильный порядок вывода независимо от режима выполнения процесса можно с помощью процедуры fflush.
Во время выполнения фонового процесса его состояние можно узнать с помощью команды ps.
Если система работает, то в ней выполняются процессы. С помощью команды ps вы можете выяснить, какие процессы активны, и просмотреть информацию о них.
У команды ps есть несколько флагов, позволяющих уточнить набор процессов, включаемых в список, и вид информации, выдаваемой о каждом из них.
Для просмотра списка процессов, выполняемых в системе, введите в командной строке:
ps -ef
Нажмите Enter.
Появится приблизительно следующий список:
ПОЛЬЗ. PID PPID C STIME TTY ВРЕМЯ CMD root 1 0 0 28 июня - 3:23 /etc/init root 1588 6963 0 28 июня - 0:02 /usr/etc/biod 6 root 2280 1 0 28 июня - 1:39 /etc/syncd 60 mary 2413 16998 2 07:57:30 - 0:05 aixterm mary 11632 16998 0 07:57:31 lft/1 0:01 xbiff mary 16260 2413 1 07:57:35 pts/1 0:00 /bin/ksh mary 16469 1 0 07:57:12 lft/1 0:00 ksh /usr/lpp/X11/bin/xinit mary 19402 16260 20 09:37:21 pts/1 0:00 ps -ef
Ниже приведено описание содержимого колонок:
ПОЛЬЗ. | Имя пользователя |
PID | ИД процесса |
PPID | ИД родительского процесса |
C | Время обработки процесса в CPU |
STIME | Время запуска процесса |
TTY | Управляющая рабочая станция процесса |
ВРЕМЯ | Общее время выполнения процесса |
CMD | Команда |
В предыдущем примере ИД процесса, запущенного командой ps -ef, - 19402. ИД родительского процесса - 16260, команда /bin/ksh.
Если список не умещается на экране, то будет показана только его нижняя часть. Во избежание этого введите команду ps в конвейере с командой pg. Введите в командной строке:
ps -ef | pg
Нажмите Enter.
Для просмотра состояния активных процессов системы введите:
ps gv
Нажмите Enter.
Будет выдана статистическая информация о каждом активном процессе. Она будет выглядеть примерно следующим образом:
PID TTY STAT ВРЕМЯ PGIN РАЗМЕР RSS LIM TSIZ TRS %CPU %MEM КОМАНДА 0 - A 0:44 7 8 8 xx 0 0 0.0 0.0 swapper 1 - A 1:29 518 244 140 xx 21 24 0.1 1.0 /etc/init 771 - A 1:22 0 16 16 xx 0 0 0.0 0.0 kproc 1028 - A 0:00 10 16 8 xx 0 0 0.0 0.0 kproc 1503 - A 0:33 127 16 8 xx 0 0 0.0 0.0 kproc 1679 - A 1:03 282 192 12 32768 130 0 0.7 0.0 pcidossvr 2089 - A 0:22 918 72 28 xx 1 4 0.0 0.0 /etc/sync 2784 - A 0:00 9 16 8 xx 0 0 0.0 0.0 kproc 2816 - A 5:59 6436 2664 616 8 852 156 0.4 4.0 /usr/lpp/ 3115 - A 0:27 955 264 128 xx 39 36 0.0 1.0 /usr/lib/ 3451 - A 0:00 0 16 8 xx 0 0 0.0 0.0 kproc 3812 - A 0:00 21 128 12 32768 34 0 0.0 0.0 usr/lib/lpd/ 3970 - A 0:00 0 16 8 xx 0 0 0.0 0.0 kproc 4267 - A 0:01 169 132 72 32768 16 16 0.0 0.0 /etc/sysl 4514 lft/0 A 0:00 60 200 72 xx 39 60 0.0 0.0 /etc/gett 4776 pts/3 A 0:02 250 108 280 8 303 268 0.0 2.0 -ksh 5050 - A 0:09 1200 424 132 32768 243 56 0.0 1.0 /usr/sbin 5322 - A 0:27 1299 156 192 xx 24 24 0.0 1.0 /etc/cron 5590 - A 0:00 2 100 12 32768 11 0 0.0 0.0 /etc/writ 5749 - A 0:00 0 208 12 xx 13 0 0.0 0.0 /usr/lpp/ 6111 - T 0:00 66 108 12 32768 47 0 0.0 0.0 /usr/lpp/
Полный синтаксис приведен в описании команды ps в книге AIX 5L Version 5.1 Commands Reference.
Вы можете также воспользоваться командами smit process и smit monitors.
Вы можете уменьшить начальный приоритет процесса по сравнению с запланированным значением с помощью команды nice.
Примечание: Для повышения приоритета процесса необходимы права доступа root.
Для того чтобы задать начальный приоритет процесса, введите:
nice -n Число Команда
где Число - число от 0 до 39 (39 - самый низкий приоритет). Чем больше число, тем ниже приоритет. Ноль означает, что процесс необходимо запустить с запланированным приоритетом. Команда - это запускаемая команда с флагами и параметрами.
Дополнительная информация и полный синтаксис приведены в описании команды nice в справочнике AIX 5L Version 5.1 Commands Reference.
Для выполнения этой задачи можно также воспользоваться командой smit nice.
Вы можете изменить приоритет уже выполняемого процесса с помощью команды renice из командной строки. Эта команда изменяет приоритет процесса, заданный командой nice.
Примечание: Для повышения приоритета процесса или изменения приоритета процесса, запущенного не вами, необходимы права доступа root.
Для того чтобы изменить приоритет выполняемого процесса, введите:
renice Приоритет -p ИД_процесса
где Приоритет - число от -20 до 20. Чем больше число, тем ниже приоритет. Ноль означает, что процесс необходимо запустить с запланированным приоритетом. ИД_процесса - это ИД процесса, приоритет которого вы хотите изменить.
Для выполнения этой задачи можно также воспользоваться командой smit renice.
Если вы запустили интерактивный процесс, а затем решили его прервать, нажмите клавишу INTERRUPT. Обычно это клавиши Ctrl-C или Ctrl-Backspace. Комбинация клавиш, выполняющая функцию INTERRUPT, указана в разделе Просмотр функций клавиш терминала (команда stty).
Примечание: С помощью INTERRUPT (Ctrl-C) нельзя отменить фоновые процессы. Для отмены фонового процесса воспользуйтесь командой kill.
Большинство простых команд не слишком подходят в качестве примеров для демонстрации прерывания процесса - они выполняются столь быстро, что вы просто не успеете их прервать. В этом разделе выбрана команда, выполнение которой занимает определенное время: find / -type f. Эта команда выдает перечень путей ко всем файлам системы. Вы можете не знать, как работает команда find - она взята здесь только для примера.
В следующем примере команда find запускает процесс. Через несколько секунд после запуска вы можете прервать процесс, нажав клавишу INTERRUPT:
$ find / -type f /usr/sbin/acct/lastlogin /usr/sbin/acct/prctmp /usr/sbin/acct/prdaily /usr/sbin/acct/runacct /usr/sbin/acct/sdisk /usr/sbin/acct/shutacct INTERRUPT (Ctrl-C) $ _
На экране вновь появится системное приглашение. Теперь вы можете ввести другую команду.
Вы можете приостановить интерактивный процесс, не удаляя его ИД из таблицы процессов. Для этого нажмите клавиши Ctrl-Z.
Примечание: Сочетание Ctrl-Z работает в оболочках Korn (ksh) и C (csh), но не в оболочке Bourne (bsh).
Эта процедура описывает, как возобновить процесс, приостановленный нажатием клавиш Ctrl-Z.
Примечание: Сочетание Ctrl-Z работает в оболочках Korn (ksh) и C (csh), но не в оболочке Bourne (bsh). Возобновить приостановленный процесс может только запустивший его пользователь или пользователь root.
ps -ef
Эту команду можно объединить в конвейер с командой grep для просмотра только нужных вам процессов. Например, если вы хотите возобновить сеанс vi, введите:
ps -ef | grep vi
Нажмите Enter. Эта команда выдаст только те строки из списка команды ps, которые содержат слово vi. Вывод будет выглядеть примерно так:
UID PID PPID C STIME TTY ВРЕМЯ КОМАНДА root 1234 13682 0 00:59:53 - 0:01 vi test root 14277 13682 1 01:00:34 - 0:00 grep vi
kill -19 1234
Вместо 1234 укажите ИД нужного процесса. Флаг -19 означает сигнал CONTINUE. Эта команда возобновляет процесс в фоновом режиме. Если процесс можно оставить фоновым, то процедура окончена. Если же процесс необходимо сделать интерактивным (так обычно и поступают с сеансами vi), перейдите к следующему шагу.
fg 1234
Вместо 1234 укажите ИД нужного процесса. Теперь процесс будет выполняться в интерактивном режиме. (Вы работаете с сеансом редактора vi).
Вы можете запланировать запуск процесса как пакетного в заданное время. Команды at и smit позволяют ввести имена команд, которые должны быть выполнены в будущем, и указать, когда именно следует выполнить эти команды.
Примечание: Доступ к команде at контролируют файлы /var/adm/cron/at.allow и /var/adm/cron/at.deny. Пользователь root может создавать, редактировать и удалять эти файлы. Записи в них - это имена пользователей, по одному имени на строку. Ниже приведен пример файла at.allow:
root nick dee sarah
Если файл at.allow существует, то применять команду at могут только указанные в нем пользователи. Системный администратор может запретить пользователю применять команду at, указав его имя в файле at.deny. Если существует только файл at.deny, то команду at могут применять все пользователи, кроме тех, которые указаны в этом файле.
Команду at нельзя применять в следующих случаях:
Если файл at.allow не существует, а файл at.deny также не существует или пуст, то запустить задание командой at может только пользователь root.
Синтаксис команды at позволяет указать строку даты, строку времени и даты или строку приращения, задающую момент запуска процесса. Кроме того, вы можете указать оболочку или очередь для запуска процесса. Ниже приведено несколько примеров применения команды:
Например, если ваш ИД пользователя - joyce и вы хотите запустить сценарий WorkReport в полночь, выполните следующие действия:
at midnight
WorkReport^D
После нажатия Ctrl-D появится примерно следующая информация:
Время запуска задания joyce.741502800.a : пятница, 6 июля 1994 г. 00:00:00
Программе WorkReport будет присвоен номер задания joyce.741502800.a; она будет запущена в полночь 6 июля.
Для просмотра списка программ, запланированных для запуска в будущем, введите:
at -l
Появится приблизительно следующий список:
joyce.741502800.a пятница, 6 июля 1994 г. 00:00:00
Для отмены запланированного запуска программы сначала просмотрите номера заданий, связанные с программами, командой at -l. Выяснив номер задания программы, которую вы хотите отменить, введите:
at -r joyce.741502800.a
Будет отменено задание joyce.741502800.a.
Полный синтаксис приведен в описании команды at в книге AIX 5L Version 5.1 Commands Reference.
Для выполнения задачи можно также воспользоваться командами smit at и smit sjat.
Вы можете просмотреть список запланированных процессов, указав флаг -l в команде at или введя команду atq.
Эти команды практически эквиваленты, однако команда atq может упорядочить процессы по моментам времени, когда вводилась команда at, и показать только номера процессов в очереди.
Вы можете просмотреть список запланированных процессов следующим образом:
Ограничения на применение команды at приведены в Примечании.
Для просмотра списка запланированных процессов введите:
at -l
Эта команда выдает список запланированных процессов в очереди. Если вы пользователь root, то команда перечислит все запланированные процессы для всех пользователей. Полный синтаксис приведен в справке по команде at.
Для просмотра списка запланированных процессов в очереди введите:
atq
Если вы пользователь root, то вы можете просмотреть запланированные процессы в очереди конкретного пользователя, введя:
atq Имя_пользователя
Для просмотра количества запланированных процессов в очереди введите:
atq -n
Вы можете удалить запланированный процесс с помощью команды at с флагом -r. Ограничения на применение команды at приведены в Примечании.
at -r Номер_процесса
Для выполнения этой задачи можно также воспользоваться командой smit rmat.
Если прервать интерактивный процесс нажатием клавиши INTERRUPT не удалось, или если после запуска фонового процесса вы решили его прервать, то отменить процесс можно командой kill. Перед применением команды kill необходимо узнать ИД (номер) процесса. Общий формат команды kill следующий:
kill ИД_процесса
Примечание: Удалить процесс может только запустивший его пользователь или пользователь root. По умолчанию команда kill отправляет процессу сигнал -15 (SIGTERM).
ps -l | grep vi
$ find / -type f > dir.paths & [1] 21593 $ ps PID TTY ВРЕМЯ КОМАНДА 1627 pts3 0:00 ps 5461 pts3 0:00 ksh 17565 pts3 0:00 -ksh 21593 pts3 0:00 find / -type f $ kill 21593 $ ps PID TTY ВРЕМЯ КОМАНДА 1627 pts3 0:00 ps 5461 pts3 0:00 ksh 17565 pts3 0:00 -ksh [1] + Завершено 21593 find / -type f > dir.paths &
Команда kill 21593 завершила фоновый процесс find, и вторая команда ps не возвратила информацию о состоянии процесса номер 21593. Система не выдаст сообщения о завершении процесса, пока вы не введете следующую команду (причем команду, отличную от cd).
Команда kill позволяет отменять фоновые процессы. Необходимость в этом возникает, когда процесс ошибочно переведен в фоновый режим или выполняется слишком долго.
Примечания:
- При удалении родительского процесса все его дочерние процессы также будут удалены.
- Для удаления процесса-зомби необходимо удалить его родительский процесс.
Полный синтаксис приведен в описании команды kill в книге AIX 5L Version 5.1 Commands Reference.
Для выполнения этой задачи можно также воспользоваться командой smit kill.