フォークと実行はどのように機能しますか?

フォークと実行はどのように機能しますか?

私は経験がなく、ユーザーレベルからハードウェアに至るまでどのように解釈されるかに参加しようとしています。

したがって、コマンドがシェルでトリガーされると、その子プロセスはfork()継承され、exec()メモリにロードされ実行されます。

  1. 子プロセスに親プロセス(つまり元のプロセス)のすべての属性が含まれている場合、子プロセスには何が必要ですか?元のプロセスがメモリにロードされた可能性があります。
  2. この概念はUNIXのすべてのランチャーにfork適用されますか?execまた、シェルスクリプトが好きですか、それともコマンドが好きですか?シェル内蔵でも動作しますか?
  3. 時だ書き込み中のコピーコマンド/スクリプトを実行するにはどのような概念が使用されますか?

一度にあまりにも多くの質問をして申し訳ありませんが、どのようなコマンドの実行を考えると、これらの質問がすぐに思い浮かびます。

ベストアンサー1

したがって、シェルでコマンドが実行されると、fork()は子プロセスを継承し、exec()は子プロセスをメモリにロードして実行します。

完全なものではなく。 fork()現在のプロセスを複製し、同じ子プロセスを作成します。 exec()新しくロードするプログラム現在のプロセスを入力し、既存のプロセスを置き換えます。

私の質問は次のとおりです

親プロセス(つまり元のプロセス)のすべての属性を含む場合、子プロセスには何が必要ですか?元のプロセスがメモリにロードされた可能性があります。

親プロセスがまだ終了したくないので必要です。新しいプロセスを開始し続けながら何かをしようとしています。

これらのフォークとexecの概念は、UNIXのすべてのランチャーに適用されますか?シェルスクリプトと同じですか、それともコマンド専用ですか?シェル内蔵でも動作しますか?

外部コマンドの場合、シェルはfork()そのコマンドが新しいプロセスで実行されるようにタスクを実行します。組み込み関数はシェルによってのみ直接実行されます。注目すべきもう1つのコマンドは、最初にシェルをexec呼び出さずにexec()外部プログラムにコマンドすることですfork()。これは、シェル自体が新しいプログラムに置き換えられ、プログラムが返されずに終了することを意味します。exec trueと言うと、/bin/trueシェルは交換され、すぐにシャットダウンされ、端末で何も実行されなくなり、閉じます。

書き込み中にコピーコンセプトを使用するときにコマンド/スクリプトを実行しますか?

石器時代には、fork()呼び出しプロセスのすべてのメモリを新しいプロセスにコピーする必要がありました。書き込み中のコピーは、両方のプロセスが同じメモリを共有し始め、両方のプロセスで書き込まれたページが必要な場合にのみコピーされるようにページテーブルを設定する最適化です。

おすすめ記事