Linuxのプロセスに疑問が1つあります
ケース 1:(ここでは Firefox は開いていません)
このコマンドを使用してコマンド ターミナルから Firefox を開くとfirefox &
、プロセスがバックグラウンドで開始されます。
ターミナルを終了するとFirefoxも終了します
ケース 2:(ここでは Firefox がすでに 1 つ開いています)
このコマンドを使用してコマンド ターミナルから Firefox を開くとfirefox &
、プロセスがバックグラウンドで開始されます。
しかし、ターミナルを終了すると、ターミナルで開かれた Firefox に何も表示されなくなります。なぜでしょうか?
ケース 1 の場合は閉じますが、ケース 2 では何が起こりますか?
答え1
ケース 2 でもほぼ同じことが起こります。違いは、Firefox が単一インスタンスのアプリケーションであり、起動時にコピーが実行されていることがわかった場合、次の処理が行われることです。
- 実行中のインスタンスにコマンドライン引数を送信します。国際PC
- 出口
これは簡略化されたアルゴリズムです。一部の引数は他の動作につながる可能性があります。ただし、ほとんどの場合、すべて上記のように発生します。
したがって、2 番目のケースではバックグラウンド プロセスは 1 秒未満しか存在しませんが、以前に起動された Firefox インスタンスはターミナルとは独立して実行され続けます。
答え2
ケース1では、ターミナルに「バインド」された新しいFirefoxプロセスを開始し、ターミナルを終了して、その後バインドされたすべてのプロセスを終了します。
ケース 2 では、& を (バックグラウンドで) 呼び出して FF を開始したとしても、FF はすでにマスター プロセスを開いており、新しいウィンドウは他の「子」として開かれるため、ターミナルではなくそれにバインドされます。したがって、ターミナルを終了すると、バインドされているすべてのプロセスが終了し、「自分の」子ではない ff は終了しません。