我有一个接收SIGTSTP信号的子进程。 当我打电话
waitpid(-1,NULL,0);
父块,但是在文档中,它写的是waitpid返回带有pid的已停止的作业。
#include<unistd.h>
#include<stdio.h>
#include<signal.h>
#include<sys/wait.h>
main() {
int pid;
if( (pid=fork()) > 0) {
sleep(5);
if(kill(pid,SIGTSTP) < 0)
printf("kill error\n");
int status;
waitpid(-1,&status,0);
printf("Returned %d\n",WIFSTOPPED(status));
}
else if(pid==0) {
while(1);
}
}
答案 0 :(得分:4)
您错过了WUNTRACED
选项waitpid
(第三个参数)。否则,在作业终止之前它不会返回。
设置WUNTRACED
选项后,由于SIGTTIN
,SIGTTOU
,SIGTSTP
或SIGSTOP
信号而停止的当前进程的子级也报告了他们的状态(来自mac手册页)。