实验六 进程基础

实验六 进程基础

项目 内容
这个作业属于哪个课程 2021春季Linux系统与应用 (南昌航空大学 - 信息工程学院)
这个作业的要求在哪里 实验六 进程基础
学号-姓名 18043210-张银杰
作业学习目标 1.掌握Linux系统环境C语言编程概念 2.学习Linux系统进程概念

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

ar:静态函数库创建的命令
-c :create
-r :replace
表示当前插入的模块名已经在库中存在,则替换同名的模块;
如果若干模块中有一个模块在库中不存在,ar显示一个错误信息,并不替换其他同名的模块。
实验六 进程基础
实验六 进程基础
实验六 进程基础

实验六 进程基础
实验六 进程基础

2.请举例说明共享库的创建与使用。
创建共享库:
实验六 进程基础
创建共享库
实验六 进程基础
使用自己的共享库
方式一:指定相对路径
实验六 进程基础
方式二:只给链接器动态库名称(若要正常实现,后面必须添加一个环境变量)
实验六 进程基础

3.编程实现一个简单文件复制命令。

man命令简介:
man是manual(手册)的缩写,使用man这个命令可以调阅其中的帮助信息
man的使用方法:
使用命令"man [N] passwd"其中N(1-9,n)参数指定手册页的类型
-a:在所有的man帮助手册中搜索
-f:显示给定关键字的简短描述信息
-P:指定内容时使用分页程序
-M:指定man手册搜索的路径
实验六 进程基础
比较复制前后文件的异同:
实验六 进程基础

text文件:
实验六 进程基础

4.使用fork创建一个子进程,进程创建成功后父子进程分别输出不同的内容
fork函数简介
(1)依赖的头文件 #include <unistd.h>
(2)fork的原理和概念:
fork子进程就是从父进程拷贝一个新的进程出来,子进程和父进程的进程ID不同,但用户数据一样。
(3)父进程和子进程
执行fork函数后有2种返回值:
对于父进程,返回的是子进程的PID(即返回一个大于0的数字);
对于子进程,则返回0,所以我们可以通过pid这个返回值来判断当前进程是父进程还是子进程。
实验六 进程基础
实验六 进程基础

全缓冲:
全缓冲指的是系统在填满标准IO缓冲区之后才进行实际的IO操作;
注意,对于驻留在磁盘上的文件来说通常是由标准IO库实施全缓冲。
行缓冲:
在这种情况下,标准IO在输入和输出中遇到换行符时执行IO操作;
注意,当流涉及终端的时候,通常使用的是行缓冲。
删除fflush(NULL);//查看运行结果区别
./fork1 > /tmp/out 输出结果删除后子程序工作前多个 Begin!

删除fflush(NULL);//查看运行结果区别
./fork1 > /tmp/out 输出结果删除后子程序工作前多个 Begin!
进一步删除15行 \n ,查看运行结果区别
删除后 Begin! 与 父进程、子进程间不换行
实验六 进程基础
实验六 进程基础

5.使用fork创建多个子进程。
实验六 进程基础
实验六 进程基础
使用sleep函数简单控制进程输出顺序
实验六 进程基础
实验六 进程基础

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

7.分别在主函数中使用execvp启动ls命令以及使用fork函数产生子进程调用execvp启动ls。
execvp 启动 ls 命令以及使用 fork 函数产生子进程调用 execvp 启动 ls 。
程序调用execvp,实现一个程序运行另一个程序
实验六 进程基础
实验六 进程基础

(2)使用fork函数产生子进程调用execvp启动ls
实验六 进程基础
实验六 进程基础

8.创建5个僵尸进程,并在终端通过ps axf命令查看僵尸进程信息。
实验六 进程基础
实验六 进程基础
ps axf 显示进程见关联的树状结构图
另开一终端输入 ps axf 查看僵尸进程,显示如下:
实验六 进程基础

9.通过wait来清理僵尸进程。
wait(等待子进程中断或结束)
(1)表头文件:

include<sys/types.h>

include<sys/wait.h>

(2)定义函数: pid_t wait (int * status);
(3)函数说明:
wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status 返回,而子进程的进程识别码也会一快返回。如果不在意结束状态值,则参数status可以设成NULL。
(4)返回值:
如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1,失败原因存于errno 中。
实验六 进程基础
实验六 进程基础

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

waitpid
(1)函数功能:用来等待某个特定进程的结束
(2)函数原型:
pid_t waitpid(pid_t pid, int *status, int options);
(3)参数:
status如果不为空,会把状态信息写到它指向的位置
options允许改变waitpid的行为,最有用的一个选项是WNOHANG,它的作用是防止waitpid把调用者的执行挂起.
(4)返回值:成功返回等待子进程的pid,失败返回-1
实验六 进程基础
实验六 进程基础

上一篇:RationalDMIS 7.1 程序运行方式(MODE用来设置测量机执行程序的模式)


下一篇:LINUX用户和用户组操作命令