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