pertanyaan ini merupakan tindak lanjut ke: Bagaimana cara menunda dan melanjutkan proses
Saya sudah mulai firefox dari sesi bash di gnome-terminal.
Pohon proses terlihat seperti ini:
$ 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
Ketika saya menekan CTRL+Z
bash, itu akan menangguhkan firefox. Ketika saya mengeluarkan perintah bg
(atau fg
) itu akan melanjutkan firefox. Ini seperti yang diharapkan.
Ketika saya mengeluarkan perintah kill -s SIGTSTP 27980
di terminal lain, itu akan mencetak baris [1]+ Stopped firefox
di terminal pertama (seperti ketika saya menekan CTRL+Z
), tetapi tidak menangguhkan firefox. Saya menganggap itu hanya menunda skrip shell.
Ketika saya mengeluarkan perintah kill -s SIGTSTP 27989
(perhatikan PID) di terminal lain, itu akan menangguhkan firefox. Terminal pertama tidak mencatat hal ini.
Bagaimana bash menangguhkan seluruh pohon proses? apakah itu hanya melintasi pohon dan SIGTSTP semua anak-anak?
sumber
pgid
Andaps
untuk melihat proses yang dibicarakan grup @geekosaur.Jawaban:
Pekerjaan Shell hidup dalam "kelompok proses"; lihat
PGRP
kolom dalamps
output yang diperluas . Ini digunakan baik untuk kontrol pekerjaan dan untuk menentukan siapa yang "memiliki" terminal (nyata atau pty).POSIX (diambil dari Sistem V) menggunakan ID proses negatif untuk menunjukkan grup proses, karena grup proses diidentifikasi oleh proses pertama dalam grup ("pemimpin grup proses"). Jadi, Anda akan gunakan
ps
untuk menentukan grup proses, lalukill -s TSTP "-$pgrp"
. (Cobaps -u"$USER" -opid,ppid,pgrp,cmd
.)Di pohon proses Anda, grup proses dimulai dengan
firefox
skrip diluncurkan olehbash
, jadi grup proses akan 27980 dan perintahnya akankill -s TSTP -27980
.Tentu, untuk melanjutkan grup proses, masalah
kill -s CONT -- -27980
.sumber
bash
tidak melakukanSIGTSTP
saat Anda mengetik^Z
; karenafirefox
grup proses adalah grup proses terminal saat ini, driver terminal (pedantically, line disiplin) mengirimkanSIGTSTP
ke semua proses dalam grup proses tersebut.bash
baruwaitpid()
saja (dan pekerjaan lain). Sinyal terminal lainnya, seperti^C
dan^\
bekerja dengan cara yang sama. (meta: SE benci ctrl-backslash ..)