【发布时间】:2012-04-09 08:23:02
【问题描述】:
我编写以下代码并在我的linux中运行。每次fork后终端打印两个PID,这表明两个进程都由操作系统调度,然后是“scanf”执行的时间,两个进程都被阻塞等待输入。但是每次我输入一个数字时,我都会在终端上打印相同的 PID。 这是否意味着当终端 IO 遇到时,操作系统调用了相同的进程,或者发生了其他事情?
int main(int argc, char* argv[])
{
int num;
if(fork() >= 0)
{
printf("%x\n",getpid());
while(1)
{
if(scanf("%d",&num) != EOF)
{
printf("%x\n",getpid());
}
}
}
printf("\nit is over:%x\n", getpid());
}
【问题讨论】:
-
您正在将测试用例分组在一起,以确定您是否在父进程和子进程中。
fork()将子进程的PID返回给父进程(>0),fork()将0返回给子进程。
标签: c process io operating-system fork