to pytanie jest kontynuacją: Jak zawiesić i wznowić procesy
Zacząłem firefox od sesji bash w gnome-terminal.
Drzewo procesów wygląda następująco:
$ 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
Kiedy uderzę CTRL+Z
w bash, zawiesi firefox. Kiedy wydam polecenie bg
(lub fg
), wznowi firefox. To jest zgodne z oczekiwaniami.
Kiedy wydam polecenie kill -s SIGTSTP 27980
w innym terminalu, wypisze on linię [1]+ Stopped firefox
w pierwszym terminalu (tak jak kiedy uderzyłem CTRL+Z
), ale nie zawiesi firefoxa. Zakładam, że tylko zawiesza skrypt powłoki.
Kiedy wydam polecenie kill -s SIGTSTP 27989
(zwróć uwagę na PID) w innym terminalu, zawiesi on firefox. Pierwszy terminal nie bierze tego pod uwagę.
W jaki sposób bash zawiesza całe drzewo procesów? czy po prostu przemierza drzewo i SIGTSTP wszystkie dzieci?
pgid
do swojego ps
polecenia, aby zobaczyć grupy procesów, o których mówi @geekosaur.