本文出自<svtter.github.io>
进程的创建
用于进程的创建。fork()的作用是,从当前位置创建一个子进程,并执行。fork的返回值为子进程的pid
#include <stdio.h> void main() { int p1, p2; if (p1 = fork()) //父进程返回1, 子进程返回0 putchar('b'); else { if(p2 = fork()) putchar('c'); else putchar('a'); } }
运行结果

进程的控制
在这段代码中使用了lockf, 和wait函数。作用是什么呢?
-
lockf顾名思义是锁定file.
lockf(1, 1, 0)
锁定资源,lockf(1, 0, 0)
释放资源。 -
wait作用为等待子进程的返回信息。wait中的signal用于接受进程的返回信号,即exit(0)中的0
#include <stdio.h> #include <wait.h> // 利用lockf(1, 1, 0)锁定输出设备 // lockf(1, 0, 0)解锁输出设备 int main() { int p1, p2, i; if(p1 = fork()) { lockf(1, 1, ); for(i = ; i < 500; i++) printf("parent%d\n", i); lockf(1, , ); wait(); //confirm the father killed after child exit(); } else { if(p2 = fork()) { lockf(1, 1, ); for(i = ; i < 500; i++) printf("son %d\n", i); lockf(1, , ); wait(); // exit(); } else { lockf(1, 1,); for(i = ; i < 500; i++) printf("grandchild%d\n", i); lockf(1, ,); exit(); } } }
运行结果
