看下面这样一段程序:
pid_t pid;
int status;
if(pid = fork() < 0){
printf("fork error\n");
}
else if(pid == 0){
exit(7);
}
if(wait(&status) != pid)
printf("wait error\n");
printf("status is %d\n", status);
首先看if(pid = fork() < 0),首先要知道 ‘=’的优先级是小于‘<’的优先级的。这一句是这样执行的,首先fork创建一个子进程,如果成功返回值大于等于0,如果失败返回值小于0,一般fork都会成功,所以这里假定fork成功,那么fork < 0 这个表达式不成立,所以pid的值为0;所以if表达式的值为假, printf("fork error\n");语句不执行。而现在pid的值不管是父进程还是子进程都是0,所以父进程和子进程都会去执行 exit(7);,所以父进程子进程都退出了,而后面的语句永远也得不到执行。所以这段程序是有问题的。正确的写法应该是:
if((pid = fork()) < 0)