进程的创建、执行和终止实验 操作系统实验
进程的创建、执行和终止实验#
目的: 本实验的目的是通过使用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()函数等待子进程,子进程结束之后,程序退出。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)