プロセスフラグ1:分岐されたが実行されていません(ユースケース?)

プロセスフラグ1:分岐されたが実行されていません(ユースケース?)

psのマニュアルページには、プロセスフラグ1が「プロセスが分岐しているが実行されていない」と記載されています。この状態のプロセスの一般的なユースケース/シナリオは何ですか?

ベストアンサー1

この文は以下を指します。forkそしてexecシステムコール 1. システムforkコールは、呼び出しプロセスをコピーして新しいプロセスを作成します。実行後にはforkそれぞれ独自のメモリを持つ2つのプロセスがあり、forkその内容はシステムコールの戻り値、プロセスID、およびその他の部分を除いて最初は同じです。違い。システムexecコールはファイルからプログラムイメージをロードし、既存のプロセスのメモリをイメージに置き換えます。

プログラムを実行する一般的な方法は、プログラムをfork実行する新しいプロセスを作成し、サブプロセスを呼び出して元のexecプログラムのコピーを新しいプログラムのコードとデータに置き換えることです。これは最も一般的な使い方です(通常、ファイルリダイレクト設定など、fork以前に行われたいくつかの操作)。exec

execaを実行せずに実行することは、+を実行した直後に親に実行させるfork最適化と見なすことができます。 + /は結果プログラムの親を変更しますが、Straightはそうではないため、まったく同じではありません。forkexecexitforkexecexitexec

Linuxのプロセスフラグ1は、execそのプログラムの元のプロセスの子(または孫など)である親プロセスによって分岐されたため、呼び出されていないプロセスを表します。fork呼ぶことなく呼ぶことはexec多くの用途があります。 (これは完全なリストではなく、一般的なユースケースの一部です。)

  • 一部のプログラムは複数のプロセッサを使用します。これは、同じプロセスで複数のスレッドを実行するか(すべてのスレッドがメモリを共有する)、各プロセッサで別々のプロセスを実行することによって(メモリを共有しない)ことができます。
  • 別々のプロセスを実行することは、特定のタスクを分離する方法です。たとえば、Chromeは各タブまたはタブグループを別々のプロセスに保持します。これにより、タブがフリーズしたりクラッシュしたり、Webページがセキュリティの脆弱性を引き起こしたりしても、他のプロセスに表示されるタブに影響を与えません。別々のプロセスを使用して、さまざまな権限でさまざまなタスクを実行することもできます。たとえば、OpenSSHサーバーはほとんどのコードを権限のないユーザーとして実行し、最後のログインステップのみをrootとして実行します。シェルはfork実装に使用されますサブシェル(スクリプト内の変数、リダイレクトなどはメインスクリプトの一部には影響しません。)
  • 悪魔通常、「デュアルフォーク」で始まります。プログラムの実行時に最初にすることは、fork親プログラムが終了することです。これは上記の「最適化」とは反対ですexec。デーモンプロセスは、元の親プロセスからデーモンプロセスを分離するために実行されます。特に、サブプロセスが完了するのを待っている間に元の親プロセスをブロックしないように(たとえば、そうでない場合)、シェルでプログラムを実行します&

¹ここでは重要ではなく、この回答の範囲外の微妙な違いがいくつかあります。

おすすめ記事