这学期在学操作系统,老师布置了一个关于进程的实验题,是在Linux系统中实现的,其中有涉及到fork()函数的调用,恰好我研究Ubuntu 也有一段时间了,就了解了下fork()函数,下面把自己实验的一点心得贴上来,也希望能帮到各位初学者(我也是个初学者)。 先看下我在网上搜索到的一篇文章,至于原作者找不到了,望谅解。如下:9 G2 Y- N, z7 J# B' I) N) g* f
1. 先看下面代码:4 s9 ]5 _3 s9 W! z4 `% c, l1 g
#include$ I/ X) V& W% R6 M5 R; A& P1 z
#include //pid_t类型定义
% p# i K# k& ^6 U+ a #include //函数fork(),getpid()定义9 Z: a0 V; g) V
void main ()
* F- I+ [: Y0 Z& ~ {
- R+ v* x, V9 V# C3 w# ^! E% k; ^ pid_t pid;4 Z4 U3 u* R$ j4 h
pid=fork();
# s' u, F2 x5 J" r+ n0 U if (pid < 0)
2 D [' n; u: Y- r; Y( r1 Y4 b printf("error in fork!");
# z. w3 \/ S2 @9 w' ] \9 l else if (pid == 0)
' {( u$ p" |3 d# h4 O& ^ printf("i am the child process, my process id is %d\n",getpid());; d) C3 \) Y, [; _, h; j
else
2 q* [6 G' B6 H' s/ d; U) D printf("i am the parent process, my process id is %d\n",getpid());6 B6 `& [ @$ L) g) X
}/ u1 H3 C7 ]' [2 [- [: U
要搞清楚fork的执行过程,就必须先讲清楚操作系统中的“进程(process)”概念。
& w. P7 K6 v. \+ M! @ 一个进程,主要包含三个元素:
5 W. |! l) D8 k9 Q9 S( U3 Q, c( ` o. 一个可以执行的程序;) V1 m. z5 `2 u3 I+ k% [& K
o. 和该进程相关联的全部数据(包括变量,内存空间,缓冲区等等);
/ x; p' y& G3 h& c7 S& M4 \. F
$ C1 o3 F7 F3 w2 y o. 程序的执行上下文(execution context)。 |