谁注册了丁丁

导航

进程间通信--fork函数

#include <unistd.h>

pid_t fork(void);

fork() creates a new process by duplicating the calling process.

1. 一个进程通过调用fork会创建一个被称为子进程的副本。父进程从调用fork()的地方执行,子进程也一样
2. 子进程是一个新建立的进程,因此有一个与父进程不一样的进程ID。因此可以通过调用getpid()检测自身运行的子进程还是父进程。
3. 不过,fork函数对父子进程提供不同的返回值--一个进程“进入“fork()调用,而另外一个则从调用中“出来“。父进程得到的fork()调用的返回值是子进程的ID,子进程得到的返回值是0(该点尤为重要). 因为任何进程的ID都不为0,程序可以借此判断自身运行的是那个进程。

 1 // fork.c
 2 #include<stdio.h>
 3 #include<sys/types.h>
 4 #include<unistd.h>
 5 
 6 int main()
 7 {
 8     pid_t child_pid;
 9 
10     printf("The main process ID is %d\n", (int)getpid());
11     child_pid = fork();    // 父子进程同时由此开始执行
12 
13     if (child_pid != 0) // fork 调用后,父进程得到子进程的ID,而子进程得到0,所以该处是父进程进入执行
14     {
15         printf("[%d]: The process ID is %d\n", __LINE__, (int)getpid());
16     }
17     else
18     {
19         printf("[%d]: The process ID is %d\n", __LINE__, (int)getpid());
20     }
21 
22     printf("[process ID]:%d 此处会调用两次,父子进程都会调用他\n\n", getpid()); // 此处会调用两次,父子进程都会调用他
23 
24     return 0; 
25 }

 

posted on 2013-07-24 15:55  leaker  阅读(965)  评论(0编辑  收藏  举报