этот вопрос является продолжением: как приостановить и возобновить процессы
Я запустил firefox из сессии bash в gnome-терминал.
Дерево процессов выглядит так:
$ ps -e -o pid,ppid,cmd -H
1828 1 gnome-terminal
26677 1828 bash
27980 26677 /bin/sh /usr/lib/firefox-3.6.15/firefox
27985 27980 /bin/sh /usr/lib/firefox-3.6.15/run-mozilla.sh /usr/lib/firefox-3.6.15/firefox-bin
27989 27985 /usr/lib/firefox-3.6.15/firefox-bin
28012 27989 /usr/lib/firefox-3.6.15/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so 27989 plugin true
Когда я нажму CTRL+Z
на bash, он остановит Firefox. Когда я введу команду bg
(или fg
), она возобновит работу firefox. Это как и ожидалось.
Когда я запускаю команду kill -s SIGTSTP 27980
в другом терминале, она напечатает строку [1]+ Stopped firefox
в первом терминале (точно так же, как когда я нажимаю CTRL+Z
), но не приостанавливает firefox. Я полагаю, что это только приостанавливает сценарий оболочки.
Когда я запускаю команду kill -s SIGTSTP 27989
(обратите внимание на PID) в другом терминале, он приостанавливает firefox. Первый терминал не принимает это к сведению.
Как bash приостанавливает все дерево процессов? это просто пересекает дерево и SIGTSTP всех детей?
pgid
в свою ps
команду, чтобы увидеть группы процессов, о которых говорит @geekosaur.