コマンドに対して内部で実際に何が起こっているか(システムコールが呼び出された)を誰かが説明できますかls | grep 'xxx'
?
2 に答える
まず、pipe(2,3p)
が呼び出されて、読み取りと書き込みの両端を持つパイプが作成されます。fork(2,3p)
その後、コマンドごとに 1 回ずつ、合計 2 回呼び出されます。次にdup2(2,3p)
、フォークされた各子の適切なファイル記述子をパイプの両端に置き換えるために使用されます。最後exec(3)
に、実際にコマンドを実行するために各子で呼び出されます。
最初のコマンドの標準出力は、パイプラインの 2 番目のコマンドに標準入力として渡されます。何が起こっているのかをより詳細に理解するために興味があるかもしれないシステム コールがいくつかあります。特に、fork(2)、execve(2)、pipe(2)、dup2(2)、read(2)、および write です。 (2)。
実際には、シェルは STDIN_FILENO と STDOUT_FILENO をそれぞれパイプの読み取り側と書き込み側に配置します。パイプラインの最初のプロセスが write(2) を実行すると、そのプロセスの標準出力が複製され、パイプの書き込み側になります。パイプの読み取り側。
もちろん、考慮すべき詳細は他にもあります。Richard Stevens による UNIX 環境での高度なプログラミングなどの本を参照してください。