使用process,fork命令

时间:2016-06-27 07:57:11

标签: c process fork

我正在编写一个简单的代码,用fork创建新进程,然后我想看看谁是子进程,谁是父进程。 据我所知,fork到子pc的返回值是0,父进程是pid号或子进程。 不知何故,无论是孩子还是父亲,我都得到0分。 有人可以向我解释这段代码有什么问题吗? 感谢。

代码是:

#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);
    }



}

2 个答案:

答案 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

答案 1 :(得分:0)

在这一行

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

您已从条件fork() == -1而非pid

分配了值