使用进程,fork 命令

working with process, fork command

我在写一个简单的代码,用fork创建新进程,然后我想看看谁是child进程,谁是父进程。 据我所知,child pc 的 fork 的 return 值为 0,而父进程的值为 pid 编号或 child 进程。 不知何故,在 child 和父亲中我都得到 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);
    }



}

问题出在你的第一个条件上。运算符 == 的优先级高于赋值运算符 =。所以在你的 childpid 变量中,你有 fork() == -1 的布尔结果。添加括号以解决您的问题:

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

为了提高可读性,将赋值放在条件之前:

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

参见 operator precedence

这一行

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

您根据条件 fork() == -1 而不是 pid

分配了一个值