Bashなどのプロセスを一時停止して再開する方法

Bashなどのプロセスを一時停止して再開する方法

この質問は、次の質問に対する後続の質問です。プロセスを一時停止して再開する方法

gnome-terminalのbashセッションでFirefoxを起動しました。

プロセスツリーは次のとおりです。

$ 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

Bash をクリックするとCTRL+ZFirefox が一時停止します。コマンドbg(または)を実行すると、fgFirefoxが復元されます。これは期待どおりに機能します。

他の端末でコマンドを実行すると、最初の端末にその行が印刷されますがkill -s SIGTSTP 27980[1]+ Stopped firefoxクリックしたときと同じようにCTRL+Z)Firefoxは一時停止しません。私はシェルスクリプトを一時停止すると思います。

kill -s SIGTSTP 27989他の端末(PIDを参照)でコマンドを実行すると、Firefoxは一時停止します。最初の端末はこれを認識しませんでした。

Bashでプロセスツリー全体を歩くには?ツリーを巡回し、すべての子ノードに SIGTSTP シグナルを送信します。

答え1

シェル操作はプロセスグループに存在し、PGRP拡張出力psの列を表示します。これは、ジョブ制御と端末(実際または個人)を「所有」する人を決定するために使用されます。

POSIX(System Vから取得)は、プロセスグループがグループの最初のプロセス(「プロセスグループリーダー」)によって識別されるため、負のプロセスIDを使用してプロセスグループを表します。したがって、を使用してpsプロセスグループを決定し、次に使用しますkill -s TSTP "-$pgrp"。 (努力していますps -u"$USER" -opid,ppid,pgrp,cmd。)

プロセスツリーでは、プロセスグループはfirefoxスクリプトの開始から始まるため、bashプロセスグループは27980で、コマンドはですkill -s TSTP -27980

もちろん、プロセスグループを復元するにはkill -s CONT -- -27980

関連情報