2016-06-27 103 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