psのマニュアルページには、プロセスフラグ1が「プロセスが分岐しているが実行されていない」と記載されています。この状態のプロセスの一般的なユースケース/シナリオは何ですか?
ベストアンサー1
この文は以下を指します。fork
そしてexec
システムコール 1. システムfork
コールは、呼び出しプロセスをコピーして新しいプロセスを作成します。実行後にはfork
それぞれ独自のメモリを持つ2つのプロセスがあり、fork
その内容はシステムコールの戻り値、プロセスID、およびその他の部分を除いて最初は同じです。違い。システムexec
コールはファイルからプログラムイメージをロードし、既存のプロセスのメモリをイメージに置き換えます。
プログラムを実行する一般的な方法は、プログラムをfork
実行する新しいプロセスを作成し、サブプロセスを呼び出して元のexec
プログラムのコピーを新しいプログラムのコードとデータに置き換えることです。これは最も一般的な使い方です(通常、ファイルリダイレクト設定など、fork
以前に行われたいくつかの操作)。exec
exec
aを実行せずに実行することは、+を実行した直後に親に実行させるfork
最適化と見なすことができます。 + /は結果プログラムの親を変更しますが、Straightはそうではないため、まったく同じではありません。fork
exec
exit
fork
exec
exit
exec
Linuxのプロセスフラグ1は、exec
そのプログラムの元のプロセスの子(または孫など)である親プロセスによって分岐されたため、呼び出されていないプロセスを表します。fork
呼ぶことなく呼ぶことはexec
多くの用途があります。 (これは完全なリストではなく、一般的なユースケースの一部です。)
- 一部のプログラムは複数のプロセッサを使用します。これは、同じプロセスで複数のスレッドを実行するか(すべてのスレッドがメモリを共有する)、各プロセッサで別々のプロセスを実行することによって(メモリを共有しない)ことができます。
- 別々のプロセスを実行することは、特定のタスクを分離する方法です。たとえば、Chromeは各タブまたはタブグループを別々のプロセスに保持します。これにより、タブがフリーズしたりクラッシュしたり、Webページがセキュリティの脆弱性を引き起こしたりしても、他のプロセスに表示されるタブに影響を与えません。別々のプロセスを使用して、さまざまな権限でさまざまなタスクを実行することもできます。たとえば、OpenSSHサーバーはほとんどのコードを権限のないユーザーとして実行し、最後のログインステップのみをrootとして実行します。シェルは
fork
実装に使用されますサブシェル(スクリプト内の変数、リダイレクトなどはメインスクリプトの一部には影響しません。) - 悪魔通常、「デュアルフォーク」で始まります。プログラムの実行時に最初にすることは、
fork
親プログラムが終了することです。これは上記の「最適化」とは反対ですexec
。デーモンプロセスは、元の親プロセスからデーモンプロセスを分離するために実行されます。特に、サブプロセスが完了するのを待っている間に元の親プロセスをブロックしないように(たとえば、そうでない場合)、シェルでプログラムを実行します&
。
¹ここでは重要ではなく、この回答の範囲外の微妙な違いがいくつかあります。