前言
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 \n", getpid()); 12 } 13 } 14 else if (pid < 0) { 15 printf("创建子进程失败\n"); 16 return 1; 17 18 } 19 else { 20 while (1) { 21 sleep(1); 22 printf("I am %d \n", getpid()); 23 } 24 } 25 26 return 0; 27 } 28
运行测试
小结
1. 本文讲述的是最简单最基本的并发实现,很多更复杂的并发实现都是基于这个框架的。
2. 如果要确保子进程先运行,并且在启动子进程后立马 exec 一个新程序的话,请将 fork 换成 vfork。