【发布时间】:2012-02-10 09:59:48
【问题描述】:
void child(int pid){
printf("Child PID:%d\n",pid);
exit(0);
}
void parent(int pid){
printf("Parent PID:%d\n",pid);
exit(0);
}
void init(){
printf("Init\n");//runs before the fork
}
int main(){
init();//only runs for parent i.e. runs once
printf("pre fork()");// but this runs for both i.e. runs twice
//why???
int pid = fork();
if(pid == 0){
child(pid); //run child process
}else{
parent(pid);//run parent process
}
return 0;
}
输出:
Init
pre fork()Parrent PID:4788
pre fork()Child PID:0
我在 Unix 操作系统(在我的例子中是 Ubuntu)中有一个进程。我一生都无法理解这是如何工作的。我知道fork() 函数将我的程序分成两个进程,但从哪里开始?它是否会创建一个新进程并再次运行整个 main 函数,如果是,为什么 init() 只运行一次,printf() 运行两次?
为什么printf("pre fork()"); 运行两次而init() 函数只运行一次?
【问题讨论】:
-
这能回答你的问题吗? printf anomaly after "fork()"
-
@NateEldredge 9 年前我接受的答案回答了我的问题:P 但是谢谢,我想:P
-
抱歉打扰了,我只是想标记这个问题的一些重复项。