バックグラウンドで(ctrl + zを介して)ハングしたアプリケーションを実行し続ける必要がありますか、または実行を停止する必要がありますか?

バックグラウンドで(ctrl + zを介して)ハングしたアプリケーションを実行し続ける必要がありますか、または実行を停止する必要がありますか?

コマンドを使用して Firefox を実行すると、xinit /path/to/firefox/binaryFirefox が実行中であることを示すウィンドウが開きます。

Ctrl次に+を押してコンソールに戻り、Alt+を押してFirefoxをバックグラウンドで一時停止します。F1Ctrlz

次に++を押してCtrlFirefoxに戻ります。 Firefoxが停止または応答しないと予想していますが、それでも問題なくFirefoxを使用できます。私の期待は、他のアプリをバックグラウンドで送信したときの経験に基づいています。たとえば、バックグラウンドで送信すると、ダウンロードプロセスが停止します。AltF7wgetwget

なぜこれが起こるのですか?

答え1

端末で Firefox を実行すると、Firefox はバックグラウンドに入り、端末から切り離されます。したがって、Ctrl+を押してもZFirefoxは実際に一時停止しませんxinit

wgetそして、ほとんどのコマンドラインプログラムにはこれらの分離された動作はありません。 GUIベースのプログラム(geditFirefoxの実行と分離など)はほとんどこのように動作します。


これが発生するのを防ぐためのいくつかのオプションがあるかどうかを調べました。-foreground可能なオプション名のように見えますが、これはFirefoxウィンドウを前景にスライドさせるだけです。

答え2

Ctrl+を押すと、Zアプリケーションが一時停止し、fgSIGCONTを使用して再起動されるまで実行が停止します(おそらくシェルまたはコマンドを介して送信されます)。bgしかし…

あなたは走っています。xinitいいえfirefoxCtrl+を押すと、Zすでに実行されている他のアプリケーションではなく、フォアグラウンドで実行されているアプリケーションにSTOP信号が送信されます。したがって、xinitX11セッションには影響しない自分自身を中断することです。

より正確に言えば、Ctrl+を押すとZフロントにSTOP信号が送信されます。プロセスグループ。これには複数のプロセスを含めることができますが、プロセスグループの目的は、倫理的にシグナリング目的のために単一の単位で維持されることです。

Ctrl(+CとSIGINT、Ctrl+とSIGQUITにも同じことが当てはまります\。一方、端末が消えると、SIGHUPは単一のプロセス、つまりセッションリーダー、通常はシェルにのみ送信されます。

xinitXサーバーとクライアントを独自のプロセスグループで実行すると、セッション全体を終了することなく中断または終了できます。キャッチできるシグナルを送信すると、Xサーバーがシャットダウンされ、これによってほとんどのXアプリケーションがシャットダウンします。したがって、Ctrl+を押すとCG​​UIセッションは閉じますが、間接的に閉じません。すべてのクライアントに対して閉じられるわけではありません。クライアントとサーバーの両方がSIGINTを受信しました。一方、Ctrl+では特定のタスクが実行されないため、セッションは一時停止されているため、実行中の端末で他のタスクを実行したい場合に便利です。CxinitCtrlZxinitxinit

関連情報