进程的创建、执行和终止实验 操作系统实验
进程的创建、执行和终止实验
目的: 本实验的目的是通过使用Linux的系统调用fork()、exec()、exit()编写一个程序,加深理解进程的创建、执行和终止等内容。
内容:
(1)利用fork()函数创建两个子进程。让系统中的3个进程分别输出一个不同的字符。观察并记录屏幕上显示的结果,分析原因。
(2)利用fork()和execlp()函数实验一个shell的基本功能,如图所示。用户输入命令后,按下列步骤执行用户命令:
1:利用fork()函数创建一个子进程。
2:利用execlp()函数启动命令程序。
3:利用wait()函数使父进程和子进程同步。

第一题代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t pid_1 = fork();
pid_t pid_2 = fork();
if (pid_1 == 0)
{
printf("我是子进程一号\t进程号是:%d\n", getpid());
exit(0);
}
if (pid_2 == 0)
{
printf("我是子进程二号\t进程号是:%d\n", getpid());
exit(0);
}
if (pid_1 != 0 && pid_2 != 0)
{
printf("我是父进程\t进程号是:%d\n", getpid());
}
}
运行结果:

第二题代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
int main(void)
{
wait(0);
pid_t pid = fork();
if (pid == 0)
{
execlp("ls", "ls", "-al", "../../../../", NULL);
}
}
运行结果:

实验分析:
第一题中用了两次fork但是最后程序却运行了四次,很明显不是创建了两个子进程,而是创建了三个,在第一个fork()被调用时创建了一个子进程。这时程序有两个进程。而由于父进程和子进程共享代码段,新被创建的子进程再次执行了这两个fork(),所以实际上第一个fork()是被执行了两次的,因此一共有四个进程。而且经过多次运行并观察结果发现,这几个进程执行的顺序是不确定的,它们是并行执行的。
第二题中先用创建了一个子进程,用过execlp()命令启用shell的ls功能查看文件夹。与此同时主进程通过wait()函数等待子进程,子进程结束之后,程序退出。

浙公网安备 33010602011771号