execveとbrk(NULL)が常に最初の2つのシステムコールであるのはなぜですか?

execveとbrk(NULL)が常に最初の2つのシステムコールであるのはなぜですか?

私が試したとき

strace ping google.com

または

strace ls 

または

even strace curl <domain>

最初の2つのシステムコールは常に次のようになります。

execve("/usr/bin/curl", ["curl", "google.com"], 0x7ffecf1bc378 /* 61 vars */) = 0
brk(NULL)                               = 0x55f553c49000

誰かが私が何をするときにexecveが常に最初のシステムコールであるかを教えてもらえますか?

私はこのマニュアルページを読みました。https://linux.die.net/man/2/execveexecveしかし、システムコールか実行可能プログラムなのかわかりません。

ベストアンサー1

Linuxでは、次の方法で新しいプロセスが作成されます。fork()、これは子プロセスを親プロセスとほぼ同じにします。プログラムは次のような新しいプロセスを作成します。その他新しいサブプロセスは、デフォルトexecve()では、「現在のプログラムを別のプログラムに置き換える」元のプロセスのプログラムと比較してすぐに呼び出されます。

brk(NULL)どこか尋ねるプロセスです。ヒープメモリ終わる。多くのプログラムはそれをすぐに使用するexecve()ため(または内部で使用するライブラリ呼び出し)、これを最初のシステム呼び出し(まもなく説明)と呼びます。それ以上は、プログラムとそのライブラリ呼び出しがしばらく呼び出される必要がない限り、2番目のシステム呼び出しになります。malloc()malloc()malloc()brk(NULL)

おすすめ記事