どのシステムコールが新しいプロセスを生成しますか?

どのシステムコールが新しいプロセスを生成しますか?

私のLinuxシステムでコマンドを実行すると、ps一部のユーザープロセスが2回表示されます(他のPID ...)。新しいプロセスなのか、同じプロセスのスレッドなのか知りたいです。私は標準Cライブラリに新しいプロセスを作成するためのいくつかの関数があることを知っています。たとえば、コマンドをfork()実行するときにプロセスを2回表示できる特定の関数が何であるかを知りたいと思います。ps新しいプロセスまたはスレッドを作成します。

答え1

少し混乱しています。fork親プロセスのイメージをコピーして新しいプロセスを作成するシステムコールです。後で子プロセスが別のプログラムになりたい場合は、一部の系列execシステム呼び出しを呼び出します(たとえば、シェルで実行しexeclたい場合は、シェルは新しい子プロセスをフォークしてから)。lsexecl("/bin/ls")

2つのプログラムが表示されていて、プログラムがpid異なる場合は、そのプログラムppid(親ID)を確認してください。たとえば、がプロセスwho p1isの場合、そのIDはプロセスフォークのプロセスであることを意味します。ただし、最初のプロセスが他のプロセスと異なる場合は、同じコマンドが2回実行されることを意味します。ppidpidp2p1ppidpid

pidとはppid同じですが、s(スレッドID)が異なる場合は、tid1つのプロセスに2つのスレッドがあることを意味します。

私は自分のシェルを作るのが良い出発点だと思います。

関連情報