Bash - プログラムを起動する一連の関数の実行

Bash - プログラムを起動する一連の関数の実行

exec*()Bashシェルがプログラムの起動に使用する関数系列のバリエーションを理解したいと思います。たとえば、このsystem()関数はを使用しますが、execl()Bashは何を使用しますか?

私はいくつかの調査をしましたが、端末で入力したコマンドを実行するためのBashソースコードの正しい場所であることを誰もが再確認したいと思いました。

Bashバージョン4.2.53を調査した結果execute_cmd.c

  1. execute_disk_command()
// I think this is where bash forks a child
pid = make_child (savestring (command_line), async); 
...
exit (shell_execve (command, args, export_env)); 
  1. shell_execve (command, args, env)
// I think this is where the child invokes the new program
execve (command, args, env);

上記の制御フローは正しいですか?

答え1

なぜこれを知りたいのかわかりませんが:

1つのexec呼び出しだけが実際にはシステムコールです。execve()

他のすべてのexec *()関数は、execve()のフロントエンドとして機能するライブラリ関数にすぎません。 truss(1) またはレプリケーションを使用すると、以下を使用しない限り、システムコールのみが表示されます。truss -u libc::

関連情報