sigchld の使用に問題があります...
私がやりたいのは、フォークで子プロセスを作成し、子プロセスを印刷して数回スリープさせることです...これらのプロセス中に、子プロセスにシグナルを送信し(SIGSTOPおよびSIGCONTINUED)、親が必要です信号が何であったかを出力するには...ここに私のコードがあります:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
void handler (int i) {
int x;
waitpid(-1,&x, 0);
printf("WIFSTOPPED=%d, WIFCONTINUED=%d\n", WIFSTOPPED(x),WIFCONTINUED(x) );
}
int main(){
int x;
int q=fork();
if(q==0){
int i=0;
printf("%d\n",getpid());
while (i<20){
printf("%d\n", i++);
sleep(1);
}
_exit(0);
}
else {
signal(SIGCHLD, handler);
waitpid(-1,&x, 0);
while(WIFEXITED(x)!=1){
waitpid(-1,&x, 0);
sleep(1);
}
exit(0);
}
}
しかし、SIGSTOPまたはSIGCONTINUEDを子に送信すると、子は停止して続行しますが、親は何も出力しないため、機能しません
なにか提案を?