【发布时间】:2018-11-25 16:35:03
【问题描述】:
根据手册页
getpid() 返回调用进程的进程 ID (PID)。
- 在以下代码中,为什么
parent pid返回的值与getpid()不同? - 主进程和父进程不一样吗?
- 为什么在不同的系统上运行时会得到不同的输出?
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, char const *argv[])
{
printf("getpid = %d \n", (int)getpid());
pid_t pid = fork();
printf("fork returned %d \n", (int)pid);
switch (pid)
{
case -1:
perror("fork failed");
break;
case 0:
printf("I am a child with pid = %d\n", (int)pid);
break;
default:
printf("I am a parent with pid = %d\n", (int)pid);
break;
}
return 0;
}
运行时输出:
getpid = 8208
fork returned 8209
I am a parent with pid = 8209
fork returned 0
I am a child with pid = 0
在另一台电脑上运行时的输出:
getpid = 2522
fork returned 2523
I am a parent with pid = 2522
fork returned 0
I am a child with pid = 2523
【问题讨论】:
-
您必须在
fork之后调用getpid因为fork使用new创建了一个new 进程> pid。 -
要么你的另一台电脑完全坏了,要么你没有运行你认为你正在运行的东西。
-
想想
pid的值,当你switch时,登陆case 0以及是否真的可以是一个pid。 -
您的另一台 PC 不会从您声称在其上运行的代码生成您声称的输出。将代码从获得正确输出的机器重新复制到没有正确输出的机器上,在第二台机器上重新编译程序,然后运行它(但不要丢失第一个程序——制作备份副本等)。重新编译的代码不太可能产生您声称未重新编译的代码产生的答案。