暨南大学本科实验报告专用?/p>
一、实验目?/p>
通过进程的创建?/p>
撤销和运行加深对进程概念和进程并发执行的理解?/p>
明确进程
与程序之间的区别?/p>
二、实验环境及设备
(一)实验室名称:计算机实验?/p>
(二)主要仪器设备:
PC
机?/p>
Linux
操作系统环境
三、实验内?/p>
?/p>
1
)编写一段程序,使用系统调用
fork()
来创建两个子进程,并由父进程重复
显示字符某字符串和自己的标识数,
而子进程则重复显示某字符串和自己的标?/p>
数?/p>
?/p>
2
)编写一段程序,使用系统调用
fork()
来创建一个子进程。子进程通过系统调用
exec()
更换自己的执行代码,显示新的代码后,调用
exit()
结束。而父进程则调?/p>
waitpid()
等待子进程结束,
并在子进程结束后显示子进程的标识符,然后正常结束?/p>
四、实验调试分?/p>
1
、实验函数说?/p>
?/p>
1
?/p>
fork
()创建新进?/p>
要创建一个进程,
最基本的系统调用是
fork
?/p>
系统调用
fork
用于派生一个进程,
头文件:
#include <unistd.h>
函数定义
?/p>
int fork( void );
返回值:
子进程中返回
0
,父进程中返回子进程
ID
,出错返?/p>
-1
函数说明?/p>
一个现有进程可以调?/p>
fork
函数创建一个新进程。由
fork
创建的新
进程被称为子进程?/p>
child process
?/p>
?/p>
fork
函数被调用一次但返回两次。两次返?/p>
的唯一区别是子进程中返?/p>
0
值而父进程中返回子进程
ID
。子进程是父进程?/p>
副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的?/p>
上述存储空间?/p>
?/p>
副本
?/p>
?/p>
这意味着父子进程间不共享这些存储空间?/p>
它们之间?/p>
享的存储空间只有代码段?/p>
?/p>
2
?/p>
exec
函数?/p>
头文件:
#include <unistd.h>
函数族:
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);