我有一个简单的程序,它使用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的正确方法是什么?
答案 0 :(得分:0)
使WIFEXITED()返回false的正确方法是什么?
使用信号杀死孩子。然后WIFSIGNALED
将为真,WTERMSIG
将为您提供信号。
请注意,您还应该检查wait
的返回代码。