読者です 読者をやめる 読者になる 読者になる

system

systemは、指定の実行ファイルを実行するライブラリ関数・・・。

Man page of SYSTEM

systemはexecファミリーと違って、プロセスの置換は行わず、新たにプロセスを作成して実行する・・・。

system_main.cは、

getpidでプロセスIDを取得し、60秒休止・・・。
その後、./system_subをsystemを使って実行・・・。
systemの場合は、スペース区切りでパラメータを指定できる・・・。
そしてまた60秒休止・・・。

system_sub.cは、

getpidでプロセスIDを取得・・・。
渡されたパラメータをfor文で一斉出力・・・。
その後60秒休止・・・。

./system_mainを実行すると、

$ ./system_main
pid = 21278

プロセスIDは21278・・・。
この時、他のターミナルで、

$ ps all | grep system
0  1000 21278 21242  20   0   4116   468 hrtime S+   pts/1      0:00 ./system_main
0  1000 21282 21206  20   0 112608  1016 pipe_w S+   pts/0      0:00 grep --color=auto system

確かに./system_mainは21278・・・。
60秒待つと、

system before.
argv[0] = ./system_sub
argv[1] = 123
argv[2] = abc
argv[3] = xyz

./system_subがsystemによって実行された・・・。
psコマンドで、

$ ps all | grep system
0  1000 21278 21242  20   0   4116   480 wait   S+   pts/1      0:00 ./system_main
0  1000 21283 21278  20   0   4116   468 hrtime S+   pts/1      0:00 ./system_sub 123 abc xyz
0  1000 21285 21206  20   0 112608  1016 pipe_w S+   pts/0      0:00 grep --color=auto system

./system_mainに加えて、./system_subプロセスがプロセスID"21283"として新たに作られている・・・。
systemによって、./system_subが実行されたあと、./system_mainで60秒休止するようにしているし、./system_subも最後に60秒休止しているので、どちらのプロセスもこの時点で残っているのである・・・。

Sample/system_main.c at master · bg1bgst333/Sample · GitHub
Sample/system_sub.c at master · bg1bgst333/Sample · GitHub