没有合适的资源?快使用搜索试试~ 我知道了~
1692540070392018000509002806658620152418李行行 实验六程控制与线程_41
需积分: 0 0 下载量 194 浏览量
2022-08-08
18:53:57
上传
评论
收藏 940KB DOCX 举报
温馨提示
试读
19页
3.掌握 waitpid函数的应用 4.掌握守护进程过程 5.掌握守护进程在各种监控中的应用 6.了解 LINUX 下线程和进程的概念7.了解多线程程序的基本原
资源详情
资源评论
资源推荐
上海电力学院 LINUX/UNIX操作系统
实验报告说明:
实验报告的一二三四部分阅读后不做改动。
第五部分实验结果记录,主要是每道题的答案的展示,按照题目要求,
有每一题的代码截图和程序运行结果的截图,以及问答题的文字答案,
流程图等。注意截图时截取有效信息。
第六部分实验结果分析,主要是每道题的解题过程的简要说明,以及
对实验结果的简要分析。
第七部分实验心得是对该实验的总体感悟。
实验时,所有以学号 20150001为例的文本都要求改为你个人的学号。
Linux程序设计实验报告 6
——进程控制与线程
一、实验目的
1.掌握进程的常用终端命令;
2.掌握用 system、exec函数簇、fork函数创建进程;
3.掌握 waitpid函数的应用;
4.掌握守护进程过程;
5.掌握守护进程在各种监控中的应用。
6.了解 LINUX 下线程和进程的概念
7.了解多线程程序的基本原理
8.了解 PTHREAD 库,学会使用 PTHREAD 库中的函数编写多线程程序
二、实验内容
1.进程的常用终端命令;
2.用 execl函数创建进程;
3.应用 fork函数创建子进程;
4.应用 fork函数创建子进程,在父子进程中执行不同的任务;
5.waitpid函数的应用;
6.守护进程的编写与应用;
7.守护进程在邮件监控中的应用;
8.守护进程在文件监视中的应用。
9. 熟悉新线程的创建,以及和主线程之间的关系
三、实验设备
计算机 PC 机,Centos 操作系统或 Ubuntu 操作系统
四、实验步骤
1. 进程的常用终端命令及函数。
(1)学习 at 指令的使用。写出 at 指令的使用格式。在当前时间 2 分钟后,通过 at 指
令运行命令"ls
-l"
(2)下列是进程调度中常用的函数,通过网络资源查找这些函数的功能与用法。
函 数
功能与用法
kill
raise
alarm
pause
signal
sigemptyset
sigfillset
sigaddset
sigdelset
sigismember
sigprocmask
2. execl函数的应用。
程序设计,用 execl函数创造进程 ls -l,用 execvp函数创造进程 ps -ef。提示:
显示当前目录下的文件信息可执行以下语句:
(1) execl("/bin/ls", "ls", "-al", NULL) ;
(2) char *arg[] = {"ps", "-ef", NULL};
execvp("ps", arg);
3. 应用 fork函数创建子进程。
(1)调试下列程序,改正程序中少量的错误,写出程序的功能与程序的运行结果。
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
int main ()
/*文件预处理,包含标准输入输出库*/
/*文件预处理,包含 system、exit等函数库*/
/*文件预处理,包含 kill、raise等函数库*/
/*文件预处理,包含 waitpid、kill、raise等函数库*/
/*文件预处理,包含 waitpid函数库*/
/*文件预处理,包含进程控制函数库*/
/*C程序的主函数,开始入口*/
{
pid_t result;
result=fork();
int newret;
/*调用 fork函数,复制进程,返回值存在变量 result中*/
if(result<0) /*通过 result的值来判断 fork函数的返回情况,这儿进行出错处理*/
{
perror("创建子进程失败");
exit(1);
}
else if (result==0)
{
/*返回值为 0 代表子进程*/
raise(SIGSTOP); /*调用 raise函数,发送 SIGSTOP 使子进程暂停*/
exit(0);
}
else
{
/*返回值大于 0 代表父进程*/
printf("子进程的进程号(PID)是:%d\n",result);
if((waitpid(NULL,WNOHANG))==0)
{
if(ret=kill(result,SIGKILL)!=0)
/*调用 kill函数,发送 SIGKILL信号结束子进程 result */
printf("用 kill 函 数 返 回 值 是 : % d , 发 出 的 SIGKILL 信 号 结 束 的 进 程 进 程
号:%d\n",ret,result);
else{ perror("kill函数结束子进程失败");}
}
}
}
int ret;
剩余18页未读,继续阅读
莫少儒
- 粉丝: 26
- 资源: 311
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0