实验六 进程基础

实验六 进程基础

 

项目

内容

这个作业属于哪个课程

班级课程的主页链接 

这个作业的要求在哪里

作业要求链接地址

学号-姓名

17041422-王骁阳

作业学习目标

1、掌握Linux系统环境C语言编程概念

2、学习Linux系统进程概念

 

一、请举例说明静态链接库的创建与使用。

以计算加法、减法为例。先编写加法(add)、减法(sub)函数,并分别编译成一个静态库。

加法代码

 

 减法代码

 

主程序代码

 

 

实验结果:

 

 二、请举例说明共享库的创建与使用。

 
 
 
 

创建libbase.so

代码:
gcc -Wall -shared -o libbase.so add.o sub.o

使用

代码
gcc -Wall -g -o output main.c ./libbase.so

实验结果

 

 三、编程实现一个简单文件复制命令

代码:

 

 

 

 

 

 实验结果

 

 

 

 

 

 四、使用fork创建一个子进程,进程创建成功后父子进程分别输出不同的内容。

实验代码

 

 

 

 

 实验结果

 

 输出重定向

 

 五、使用fork创建多个子进程。

代码

 

 

 

 

 结果

 

 

用sleep函数

 #include <stdio.h>

#include <stdlib.h>
#include <unistd.h>
int main(){
int i;
pid_t pid;
printf("[%d] Begin! \n",getpid());
for (i = 0;i < 3; i++)
{
if((pid = fork()) ==0 )
break;
}
if(pid<0)
{
perror("fork()");
exit(1);
}
else if(pid > 0)
{   
sleep(3);
printf("[%d] Parent process is working!\n",getpid());
}
else
{
sleep(i);
printf("[%d] Child process %d is working!\n",getpid(),i);
}
return 0;
}
实验结果

 

 六、在 fork 之前以写的方式创建了一个文件 test.txt。然后 fork 出的子进程立即向文件中写入“world”,然后睡眠5秒。而父进程在 fork 后睡眠3秒后向 test.txt 写入 "hello",并关闭描述符。子进程恢复后,又向 test.txt 文件中写入 "lalala"后关闭描述符,结束。

代码

 

 

 

 

 实验结果

 

 七、分别在主函数中使用execvp启动ls命令以及使用fork函数产生子进程调用execvp启动ls

实验代码

 

 

 

(2)、使用fork函数产生子进程调用execvp启动ls命令:

 

 

 

 

 八、创建5个僵尸进程,并在终端通过ps axf命令查看僵尸进程信息。

 

 

 

 实验结果

 

 在终端中新建一个窗口,输入:ps axf

 

 九、通过wait来清理僵尸进程。

 

 

 

 

 

 实验结果

 

 十、父进程通过waitpid函数等待特定子进程结束,若该子进程不结束,父进程一直阻塞。

 

 

 

 

 实验结果

 

 其中父进程一直不结束

posted @ 2020-05-07 22:44  王骁阳  阅读(220)  评论(0)    收藏  举报