前言
Linux 是多道处理系统,当然能够在同一段时间内处理多个程序。
本文将介绍具体该如何操作。
fork 函数
此函数的作用是创建一个子进程,调用后,调用进程和创建的新进程就会并发执行( 从调用处开始 )。它调用一次,却返回两次,一次是在调用进程内,返回子进程ID,另一次是在创建的新进程( 子进程 )内,返回 0。
函数的具体说明请参阅相关文档。
并发代码框架
1 #include2 #include 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 #include2 #include 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 }
运行测试
小结
1. 本文讲述的是最简单最基本的并发实现,很多更复杂的并发实现都是基于这个框架的。
2. 如果要确保子进程先运行,并且在启动子进程后立马 exec 一个新程序的话,请将 fork 换成 vfork。