【发布时间】:2017-08-19 06:11:04
【问题描述】:
我有一个使用 fork() 创建子进程的简单程序,子进程使用 execvp() 函数执行 Unix 方法,例如:“ls”或“echo”。 当子进程正在工作时,父进程正在使用 wait() 函数等待。 孩子完成后,父母使用 WIFEXITED() 宏检查导致孩子结束的原因。如果孩子没有正常结束,父母会在屏幕上打印一条消息。 出于调试目的,我想让孩子正常终止不,我尝试运行一个除以零但仍然是行的程序:
if(!WIFEXITED(status))
每次都返回真。
我的代码:
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 的正确方法是什么?
【问题讨论】:
标签: c unix process operating-system wait