ピット-親プロセスがサブプロセスが終了したかどうかを知るには
1482 ワード
この方法は、主に親子プロセスの同時実行を実現し、親プロセスがサブプロセスが終了したかどうかを確認するために使用されます.
ネット上では、親プロセスでkill(pid,0)(pidがサブプロセスid)を使用してサブプロセスが終了するかどうかを取得すると言われていますが、0が後退していない場合は、-1が後退しています.その結果,自分で何度か実験したが,サブプロセスが終了するかどうかにかかわらず,0を返すことが分かった.の
すなわち,kill()関数だけではサブプロセスの状態をチェックできない.waitpid()とwait()関数のサブプロセス終了後に親プロセスが実行を継続する機能を使用すると、kill()関数はサブプロセスの状態をチェックできます.具体的な原因はずっと分からなかった...
プロセス間通信を学んだ後、signumはある信号を表し、handlerはこの信号の処理方式を表す.
1つのプロセスが終了または停止すると、SIGCHLD信号が親プロセスに送信され、システムはデフォルトでこの信号を無視することを知っています.この場合,handler関数を用いるだけで,サブプロセスが停止したか否かを判断できる.具体的な方法は以下の通りです.
転載は出典を明記してください!!!
間違って書かれていたり、全面的に書かれていないところがあれば、ホームページの連絡先で指摘してください.ありがとうございます.
ネット上では、親プロセスでkill(pid,0)(pidがサブプロセスid)を使用してサブプロセスが終了するかどうかを取得すると言われていますが、0が後退していない場合は、-1が後退しています.その結果,自分で何度か実験したが,サブプロセスが終了するかどうかにかかわらず,0を返すことが分かった.の
すなわち,kill()関数だけではサブプロセスの状態をチェックできない.waitpid()とwait()関数のサブプロセス終了後に親プロセスが実行を継続する機能を使用すると、kill()関数はサブプロセスの状態をチェックできます.具体的な原因はずっと分からなかった...
プロセス間通信を学んだ後、signumはある信号を表し、handlerはこの信号の処理方式を表す.
1つのプロセスが終了または停止すると、SIGCHLD信号が親プロセスに送信され、システムはデフォルトでこの信号を無視することを知っています.この場合,handler関数を用いるだけで,サブプロセスが停止したか否かを判断できる.具体的な方法は以下の通りです.
#include
#include
#include
#include
#include
void handler(int sig) {
if (sig == SIGCHLD) {
int status;
waitpid(-1, &status, WNOHANG);
}
}
int main() {
int pid = fork();
if (pid<0) {
perror("fork faild");
}
if (!pid) {
sleep(5);
printf(" : over
");
exit(0);
}
else {
signal(SIGCHLD, handler);
while(1) {
sleep(1);
int ret = kill(pid, 0);
if (ret < 0) {
printf(" :
");
break;
}
else {
printf(" :
");
}
}
}
printf(" !
");
}
転載は出典を明記してください!!!
間違って書かれていたり、全面的に書かれていないところがあれば、ホームページの連絡先で指摘してください.ありがとうございます.