Читайте также:
|
|
Команда ps.
Предназначена для вывода информации о выполняемых процессах. Данная команда имеет много параметров, о которых вы можете прочитать в руководстве (man ps). Здесь я опишу лишь наиболее часто используемые мной:
Параметр | Описание |
-а | отобразить все процессы, связанных с терминалом (отображаются процессы всех пользователей) |
-е | отобразить все процессы |
-t список терминалов | отобразить процессы, связанные с терминалами |
-u идентификаторы пользователей | отобразить процессы, связанные с данными идентификаторыми |
-gидентификаторы групп | отобразить процессы, связанные с данными идентификаторыми групп |
-x | отобразить все процессы, не связанные с терминалом |
Например, после ввода команды ps -a вы увидите примерно следующее:
PID TTY TIME CMD
1007 tty1 00:00:00 bash
1036 tty2 00:00:00 bash
1424 tty1 00:00:02 mc
1447 pts/0 00:00:02 mpg123
2309 tty2 00:00:00 ps
Для вывода информации о конкретном процессе мы можем воспользоваться командой:
# ps -ax | grep httpd
698? S 0:01 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1261? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1262? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1263? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1264? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1268? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1269? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1270? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1271? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1272? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1273? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
1280? S 0:00 httpd -DHAVE_PHP4 -DHAVE_PROXY -DHAVE_ACCESS -DHAVE_A
В приведенном выше примере используется перенаправление ввода вывода между программами ps и grep, и как результат получаем информацию обо всех процессах содержащих в строке запуска "httpd". Данную команду (ps -ax | grep httpd) я написал только лишь в демонстрационных целях - гораздо проще использовать параметр -С программы ps вместо перенаправления ввода вывода и параметр -e вместо -ax.
Управление процессами с помощью сигналов
В данном сценарии изучаются сигналы, управляющие клавиши для передачи процессам сигналов, команды для управления процессами.
Начальные условия: Командная строка после входа в систему.
1. Запустите команду yes, производящую бесконечный вывод символа
у |
на экран. Прервите её нажатием Ctrl-C.
user@desktop ~ $ yes
y
y
y
y
...
y
user@desktop ~ $
При этом запущенному процессу был отправлен сигнал SIGTERM — завершения программы.
2. Запустим сбор информации обо всех файлах системы с помощью команды find / > files.txt.
user@desktop ~ $ find / > files.txt
3. Найдем идентификатор запущенного только что процесса с помощью команды ps aux | grep find, запущенной в другом терминале.
user@desktop ~ $ ps aux | grep find
user 8178 9.7 0.1 2844 1020 pts/1 R+ 23:45 0:00 find /
user 8230 0.0 0.1 2708 736 pts/2 R+ 23:45 0:00 grep find
Первая строка содержит необходимый PID.
4. Отправим сигнал завершения этому процессу с помощью команды kill 8178, указав в качестве параметара идентификатор процесса.
user@desktop ~ $ kill 8178
Можно убедиться, что на терминале с запущенной командой появились строка «Terminated» и приглашение.
5. Если попытаться завершить системный процесс, например командой kill 1, появится сообщение об ошибке доступа:
user@desktop ~ $ kill 1
bash: kill: (1) - Operation not permitted
Отправление сигналов системным процессам может производить только суперпользователь.
6. Альтернативным способом отправления сигналов процессам — по имени процесса, а не по PID — является команда killall. Выполнив команду killall bash, мы завершим все командные оболочки, а тем самым и сеансы пользователей.
user@desktop ~ $ killall bash
7. До этого мы отправляли только сигнал завершения процесса. Он может перехватываться и игнорироваться программами. Неперехватываемым является сигнал SIGKILL, который может быть отправлен, например, следующей командой: killall -SIGKILL find
user@desktop ~ $ killall -SIGKILL find
Дата добавления: 2015-01-30; просмотров: 107 | Поможем написать вашу работу | Нарушение авторских прав |