私のLinuxシステムでコマンドを実行すると、ps
一部のユーザープロセスが2回表示されます(他のPID ...)。新しいプロセスなのか、同じプロセスのスレッドなのか知りたいです。私は標準Cライブラリに新しいプロセスを作成するためのいくつかの関数があることを知っています。たとえば、コマンドをfork()
実行するときにプロセスを2回表示できる特定の関数が何であるかを知りたいと思います。ps
新しいプロセスまたはスレッドを作成します。
答え1
少し混乱しています。fork
親プロセスのイメージをコピーして新しいプロセスを作成するシステムコールです。後で子プロセスが別のプログラムになりたい場合は、一部の系列exec
システム呼び出しを呼び出します(たとえば、シェルで実行しexecl
たい場合は、シェルは新しい子プロセスをフォークしてから)。ls
execl("/bin/ls")
2つのプログラムが表示されていて、プログラムがpid
異なる場合は、そのプログラムppid
(親ID)を確認してください。たとえば、がプロセスwho p1
isの場合、そのIDはプロセスフォークのプロセスであることを意味します。ただし、最初のプロセスが他のプロセスと異なる場合は、同じコマンドが2回実行されることを意味します。ppid
pid
p2
p1
ppid
pid
pid
とはppid
同じですが、s(スレッドID)が異なる場合は、tid
1つのプロセスに2つのスレッドがあることを意味します。
私は自分のシェルを作るのが良い出発点だと思います。