【发布时间】:2013-04-18 08:00:40
【问题描述】:
//same program different code
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
int pid;
pid=fork();
if(pid<0)
{
printf("\n Error ");
exit(1);
}
else if(pid==0)
{
printf("\n Hello I am the child process ");
printf("\n My pid is %d ",getpid());
exit(0);
}
else
{
printf("\n Hello I am the parent process ");
printf("\n My actual pid is %d \n ",getpid());
exit(1);
}
}
我试过了,我希望它是正确的。
但我对输出不满意。
输出是:
Hello I am the parent process
My actual pid is 4287
ashu@ashu-VirtualWorld:~/Desktop/4thSemester/testprep$
Hello I am the child process
My pid is 4288
请帮助我,我无法理解它的输出,我希望子进程首先发生,然后是父进程。 另外,当执行结束时,控制权转移到程序,所以要返回终端我必须使用 ctrl+c ,我希望在程序执行结束后控制权转移到终端。
【问题讨论】:
-
如果你想“先发生”,为什么还要并行编程?那为什么不按顺序写呢?也就是说,您可以选择无数种选择,例如使用互斥锁、延迟等……但对于您的场景,您根本不需要并行进程。
-
我确实先按顺序编写了子进程,但我首先获得了父进程:(对于互斥锁、延迟等术语也是新手!
-
是的,unwind 的回答说得非常准确……它们应该并行运行。这意味着它们都有自己的处理器时间片,并轮流“执行”(多任务处理的基础知识)。现在,您的子进程几乎总是会稍微落后于您的父进程,因为父进程在其当前时间片结束之前仍然是“它”,而子进程必须等待轮到他。