使用进程,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);
}
这一行
if(childpid = fork() == -1)
您根据条件 fork() == -1
而不是 pid
分配了一个值
我在写一个简单的代码,用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);
}
这一行
if(childpid = fork() == -1)
您根据条件 fork() == -1
而不是 pid