2016-06-27 68 views
0

即时编写一个简单的代码,用fork创建新进程,然后我想查看谁是子进程以及谁是父进程。 据我所知,fork到子pc的返回值是0,父进程是pid号或子进程。 以某种方式在孩子和父亲我得到0. 有人可以向我解释这个代码有什么问题吗? 谢谢。使用进程,fork命令

代码:

#include <sys/wait.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 

void main() 
{ 
    pid_t childpid; 
    int status,i; 

    if(childpid = fork() == -1){ 
     perror("fork err"); 
     exit(1); 
    } 
    if(childpid == 0){ 
     printf("child process, pid number is %d and returned value from fork is %d\n",getpid(),childpid); 
    } 
    else{ 
     printf("father process, pid number is %d and returned value from fork is %d\n",getpid(),childpid); 
    } 



} 
+0

''==具有优先权更高分配一个值。 –

回答

0

的问题来自于你的第一个条件。运算符==比赋值运算符=具有更高的优先级。因此,在您的childpid变量中,您的布尔结果为fork() == -1。添加括号解决您的问题:

if((childpid = fork()) == -1){ 
    perror("fork err"); 
    exit(1); 
} 

更多可读性,把条件之前分配:

childpid = fork(); 
if(childpid == -1){ 
    perror("fork err"); 
    exit(1); 
} 

operator precedence

0

在这一行

if(childpid = fork() == -1) 

从条件fork() == -1而不是比`=`一个pid