コマンドxinit /path/to/firefox/binary
でFirefoxを実行すると、Firefoxが実行されているディスプレイが開きます。
それから私はプッシュします Ctrl +Alt+F1 コンソールに戻ってからプッシュする Ctrl+z Firefoxをバックグラウンドで一時停止します。
次に、プッシュします Ctrl+Alt+F7 Firefoxに戻ります。 Firefoxがフリーズするか応答しないと思いますが、Firefoxは問題なく使用できます。私の期待は、wget
のような他のアプリをバックグラウンドに送信したときの私の経験に基づいています。 wget
をバックグラウンドに送信すると、ダウンロードプロセスが停止します。
なぜこれが起こるのですか?
Firefoxはそれ自体をバックグラウンドに置き、ターミナルから実行するとターミナルから切り離されます。したがって、 Ctrl+Z Firefoxを実際に一時停止しているわけではなく、おそらくxinit
を一時停止しています。
wget
およびほとんどのコマンドラインプログラムには、このようなデタッチ動作はありません。 gedit
のようなGUIベースのプログラムは、ほとんどがFirefoxのように起動してデタッチします。
これを防ぐためのオプションがあるかどうかを調べました。 -foreground
はおそらくオプション名のように見えましたが、それはFirefoxウィンドウを前面に押し出すだけです。
押す Ctrl+Z のように、アプリケーションを一時停止します。SIGCONTで再開されるまで実行を停止します(シェルのfg
またはbg
コマンドを介して送信される可能性があります)。だが…
xinit
ではなくfirefox
を実行しています。押す Ctrl+Z 実行された可能性のある他のアプリケーションではなく、フォアグラウンドで実行されているアプリケーションにSTOP信号を送信します。したがって、xinit
自体を一時停止しただけであり、これはX11セッションには影響しません。
より正確には、 Ctrl+Z STOP信号をフォアグラウンドに送信します プロセスグループ 。これには複数のプロセスが含まれる場合がありますが、プロセスグループの目的は、シグナリングの目的で道徳的に単一のユニットであるということです。
(同じことが当てはまります Ctrl+C およびSIGINT、および Ctrl+\ とSIGQUIT。一方、端末が消えたときのSIGHUPは、単一のプロセスにのみ送信されます。セッションリーダー、通常はシェル。シェルは、起動したジョブにSIGHUPを送信します。)
xinit
は、Xサーバーとクライアントの両方を独自のプロセスグループで実行します。これにより、セッション全体を強制終了せずに、Xサーバーを一時停止または強制終了できます。キャッチ可能なシグナルを送信すると、Xサーバーが強制終了され、ほとんどのXアプリケーションが終了します。 Ctrl+C GUIセッションを停止しますが、間接的に、すべてのクライアントとサーバーがSIGINTを受信したためではありません。 Ctrl+C。一方、xinit
は特に何もしません Ctrl+Z、そのため、xinit
を一時停止し、セッションをそのままにします。これは、xinit
を実行したターミナルで他のことをしたい場合に便利です。