文档介绍:Linux 进程创建
实验目的
1. 了解有关 Linux 系统调用;
2. 学习有关 Linux 的进程创建,理解进程创建后两个并发进程的执行。
实验内容
在 Linux 环境下,用 c 语言编程,使用系统调用 fork 创建进程一个子进程。
观察其运行的结果。
实验提示:LINUX 系统调用
1. 进程控制的系统调用
l fork 系统调用创建新的子进程
格式: pid=int fork()
fork 调用返回时,系统中已有两个用户级环境完全相同的进程存在,这两个
进程从 fork 调用中得到的返回值不同,其中子进程得到的返回值为零,父进程
得到的返回值是新创建子进程的进程标识号。
l exec 系统调用
格式:(六种)
int execl(path,arg0,arg1,…,argn,(char *)0)
char *path, *arg0, *arg1, …, *argn ;
exec 调用进程的正文段被指定的目标文件的正文段所覆盖,其属性的变化方
式与 fork 成功后从父进程那里继承属性的方式几乎是一样的。系统中绝大多数
命令都是通过 exec 来执行的,不但 shell 进程所创建的子进程使用它来执行用户
命令,shell 进程本身和它的祖先进程也是用 exec 来启动执行的。
l exit 系统调用终止进程执行
格式:void exit(status)
int status ;
参数 status 是调用进程终止时传递给其父进程的值。如调用进程还有子进
程,则将其所有子进程的父进程改为 1 号进程。
l wait 系统调用等待子进程暂仃或终止
格式:int wait(stat_loc) int wait((int *)0)
int stat_loc ;
wait 调用将调用进程挂起,直到该进程收到一个被其捕获的信号或者它的任
何一个子进程暂仃或终止为止。如果 wait 调用之前已有子进程暂仃或终止,则
该调用立即返回。
l lockf 锁定文件
格式:int lockf(fd,fuction,size)
int files, fuction; long size; fd –锁定文件标识
function=0 不锁定表示
=1 锁定
=2 测试和锁定
=3 测试有否被锁定
size --锁定或解锁的字节数,0 表示从文件的当前位置到文件尾。
l C Program forking a separate process
#include <>
void main(int argc, char *argv[ ])
{ int pid;
pid=fork(); /* fork child process */
if (pid<0){ fprintf(stderr, “Fork Failed”); exit(-1);
}
else if (pid==0) { execlp(“/bin/ls”,”ls”,NULL);
} /* child process */
else { wait(NULL);
pr