Дерево процессов
Если вызывать программу ps с флагами -e и -H, то можно увидеть дерево процессов в наглядной форме.
Если ваша терминальная программа использует пропорциональный шрифт, то следующая команда выведет дерево процессов с соединительными ветвями:
$ ps -e –forest
Если в вашей системе установлен пакет программ psmisc, то дерево процессов можно увидеть при помощи программы pstree. Существуют также графические утилиты для просмотра дерева процессов: ksysguard, gnome-system-monitor и т. д.
Возникает вопрос: что произойдет с работающим потомком при завершении родительского процесса? В этом случае возможны следующие варианты:
дочерний процесс завершается (например, из-за оборванной связи с управляющим терминалом);
родительским процессом для "осиротевшего" потомка становится процесс init.
Первый вариант будет рассматриваться в главе 20, а второй можно легко проверить:
$ bash
$ yes > /dev/null &
[1] 28316
$ ps -f
В результате будет выведено:
UID PID PPID C STIME TTY TIME CMD
nnivanov 28229 28226 0 14:13 pts/0 00:00:00 bash
nnivanov 28276 28229 0 14:13 pts/0 00:00:00 bash
nnivanov 28316 28276 90 14:14 pts/0 00:00:05 yes
nnivanov 28326 28276 0 14:14 pts/0 00:00:00 ps -f
$ exit
exit
$ ps –f
В результате получим:
UID PID PPID C STIME TTY TIME CMD
nnivanov 28229 28226 0 14:13 pts/0 00:00:00 bash
nnivanov 28316 1 94 14:14 pts/0 00:00:19 yes
nnivanov 28356 28229 0 14:14 pts/0 00:00:00 ps -f
Рассмотрим внимательно приведенный пример. Сначала мы запускаем еще один экземпляр оболочки bash. Под этим новым экземпляром оболочки запускаем в фоновом режиме программу yes, перенаправив ее вывод на устройство /dev/null.
Команда ps -f выводит информацию о том, что родителем yes является второй экземпляр оболочки с идентификатором 28276. После этого команда exit завершает второй экземпляр оболочки. Наконец, команда ps -f, выполненная уже под исходным экземпляром оболочки, показывает, что процесс 28316 не завершился, но его PPID стал равным 1, т. е. процесс init стал родителем "осиротевшего" процесса.
Достарыңызбен бөлісу: |