实验六 进程基础
实验六 进程基础
一、请举例说明静态链接库的创建与使用。
以计算加法、减法为例。先编写加法(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函数等待特定子进程结束,若该子进程不结束,父进程一直阻塞。



实验结果

其中父进程一直不结束
浙公网安备 33010602011771号