Linux プロセスにおける混乱

Linux プロセスにおける混乱

Linuxのプロセスに疑問が1つあります

ケース 1:(ここでは Firefox は開いていません)

このコマンドを使用してコマンド ターミナルから Firefox を開くとfirefox &、プロセスがバックグラウンドで開始されます。

ターミナルを終了するとFirefoxも終了します

ケース 2:(ここでは Firefox がすでに 1 つ開いています)

このコマンドを使用してコマンド ターミナルから Firefox を開くとfirefox &、プロセスがバックグラウンドで開始されます。

しかし、ターミナルを終了すると、ターミナルで開かれた Firefox に何も表示されなくなります。なぜでしょうか?

ケース 1 の場合は閉じますが、ケース 2 では何が起こりますか?

答え1

ケース 2 でもほぼ同じことが起こります。違いは、Firefox が単一インスタンスのアプリケーションであり、起動時にコピーが実行されていることがわかった場合、次の処理が行われることです。

  1. 実行中のインスタンスにコマンドライン引数を送信します。国際PC
  2. 出口

これは簡略化されたアルゴリズムです。一部の引数は他の動作につながる可能性があります。ただし、ほとんどの場合、すべて上記のように発生します。

したがって、2 番目のケースではバックグラウンド プロセスは 1 秒未満しか存在しませんが、以前に起動された Firefox インスタンスはターミナルとは独立して実行され続けます。

答え2

ケース1では、ターミナルに「バインド」された新しいFirefoxプロセスを開始し、ターミナルを終了して、その後バインドされたすべてのプロセスを終了します。

ケース 2 では、& を (バックグラウンドで) 呼び出して FF を開始したとしても、FF はすでにマスター プロセスを開いており、新しいウィンドウは他の「子」として開かれるため、ターミナルではなくそれにバインドされます。したがって、ターミナルを終了すると、バインドされているすべてのプロセスが終了し、「自分の」子ではない ff は終了しません。

関連情報