第十八章:并发程序的基本实现( 多进程 )

前言

       Linux 是多道处理系统,当然能够在同一段时间内处理多个程序。

       本文将介绍具体该如何操作。

fork 函数

       此函数的作用是创建一个子进程,调用后,调用进程和创建的新进程就会并发执行( 从调用处开始 )。它调用一次,却返回两次,一次是在调用进程内,返回子进程ID,另一次是在创建的新进程( 子进程 )内,返回 0。

       函数的具体说明请参阅相关文档。

并发代码框架

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 
 4 int main (void) {
 5 
 6     int pid;
 7 
 8     if ((pid = fork()) == 0) {
 9 
10         /* 
11          * 此处填写子进程代码 
12         */ 
13 
14     }
15     else if (pid < 0) {
16 
17         /* 
18          * 此处填写错误处理代码 
19         */ 
20 
21     }
22     else {
23 
24         /* 
25          * 此处填写父进程代码 
26         */ 
27 
28     }
29     
30     return 0;
31 }

代码实现

  此程序将让两个进程交替的每隔 1 秒打印它们的各自进程 ID:

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 
 4 int main (void) {
 5 
 6     int pid;
 7 
 8     if ((pid = fork()) == 0) {
 9         while (1) {
10             sleep(1);
11             printf("I am %d 
", getpid());
12         }
13     }
14     else if (pid < 0) {
15         printf("创建子进程失败
");
16         return 1;
17 
18     }
19     else {
20         while (1) {
21             sleep(1);
22             printf("I am %d 
", getpid());
23         }
24     }
25     
26     return 0;
27 }

运行测试

       

小结

       1. 本文讲述的是最简单最基本的并发实现,很多更复杂的并发实现都是基于这个框架的。

       2. 如果要确保子进程先运行,并且在启动子进程后立马 exec 一个新程序的话,请将 fork 换成 vfork。

原文地址:https://www.cnblogs.com/muchen/p/6354566.html