C - 获取WIFEXITED以返回false以用于debuging目的

时间:2017-03-26 16:05:17

标签: c unix process operating-system wait

我有一个简单的程序,它使用fork()来创建子进程,子进程使用execvp()函数来执行Unix方法,如:" ls"或" echo"。 当子进程正在运行时,父进程正在使用wait()函数进行等待。 孩子完成后,父母使用WIFEXITED()宏检查导致孩子结束的原因。如果孩子通常没有结束,则父母在屏幕上打印消息。 出于debuging的目的,我想让孩子正常终止而不是,我试图运行一个程序,该程序可以归零,但仍然是行:

if(!WIFEXITED(status))

每次都返回true。

我的代码:

int main(){

pid_t p;
int status;
p = fork();
if (p == 0){//child process
    execlp("/bin/ls", "ls", NULL);
    exit(0);        
}else{
    wait(&status);
    if (!WIFEXITED(status))//if the child process terminated not normally
        fprintf(stderr, "\tError Occured!\n");//display error message 
}
return 0;}

来自wait()的手册页:

  

WIFEXITED(状态)                 如果子节点正常终止,即通过调用exit(3)或_exit(2),或从main()返回,则返回true。

使WIFEXITED()返回false的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

  

使WIFEXITED()返回false的正确方法是什么?

使用信号杀死孩子。然后WIFSIGNALED将为真,WTERMSIG将为您提供信号。

请注意,您还应该检查wait的返回代码。