c语言多进程多线程编程(2)
道描述符,向被执行命令读或写数据(做为被执行命令的STDIN或 STDOUT)该系统调用可以用来在程序中调用系统命令,并取得命令 的输出信息或者向命令输入信息.
返回值:不成功则返回NULL,成功则返回管道的文件指针.
2.5.pclose() 关闭到一个进程的管道
功能:关闭到一个进程的管道. 语法:
#include
说明:本系统调用用于关闭由popen()打开的管道,并会等待由popen() 激活的命令执行结束后,关闭管道后读取命令返回码.
返回值:若关闭的文件描述符不是由popen()打开的,则返回-1. 例子:printf(\ FILE * fd;
if ((fd=popen(\ printf(\ return; }
else {
char str[80];
while (fgets(str,80,fd)!=NULL) printf(\ } pclose(fd);
2.6.wait() 等待一个子进程返回并修改状态
功能:等待一个子进程返回并修改状态 语法:
#include
说明:允许调用进程取得子进程的状态信息.调用进程将会挂起直到其 一个子进程终止.
返回值:等待到一个子进程返回时,返回值为该子进程号,否则返回值为 -1.同时stat_loc返回子进程的返回值. 例子:/*父进程*/ if (fork()>0) { wait((int *)0);
/*父进程等待子进程的返回*/ } else {
/*子进程处理过程*/ exit(0); }
2.7.waitpid() 等待指定进程号的子进程的返回并修改状态
功能:等待指定进程号的子进程的返回并修改状态 语法:
#include
pid_t waitpid(pid,stat_loc,options) pid_t pid;
int *stat_loc,options;
说明:当pid等于-1,options等于0时,该系统调用等同于wait().否则该 系统调用的行为由参数pid和options决定.
pid指定了一组父进程要求知道其状态的子进程: -1:要求知道任何一个子进程的返回状态.
>0:要求知道进程号为pid值的子进程的状态.
<-1:要求知道进程组号为pid的绝对值的子进程的状态. options参数为以比特方式表示的标志以或运算组成的位图,每个 标志以字节中某个比特置1表示:
WUNTRACED:报告任何未知而又已停止运行的指定进程号的子进 程的状态.该子进程的状态自停止运行时起就没有被报告 过. WCONTINUED:报告任何继续运行的指定进程号的子进程的状态, 该子进程的状态自继续运行起就没有被报告过.
WHOHANG:若调用本系统调用时,指定进程号的子进程的状态目 前并不是立即有效的(即可被立即读取的),调用进程并被 暂停执行. WNOWAIT:保持将其状态设置在stat_loc的进程在可等待状态.
该进程将等待直到下次被要求其返回状态值.
返回值:等待到一个子进程返回时,返回值为该子进程号,否则返回值为 1. 同时stat_loc返回子进程的返回值. 例子:pid_t pid;
int stat_loc; /*父进程*/ if ((pid=\
waitpid(pid,&stat_loc,0);
/*父进程等待进程号为pid的子进程的返回*/ } else {
/*子进程的处理过程*/
exit(1); }
/*父进程*/
printf(\
/*字符串\将被打印出来*/
2.8.setpgrp() 设置进程组号和会话号
功能:设置进程组号和会话号. 语法:
#include
说明:若调用进程不是会话首进程.将进程组号和会话号都设置为与它 的进程号相等.并释放调用进程的控制终端. 返回值:调用成功后,返回新的进程组号. 例子:/*父进程处理*/ if (fork()>0) { /*父进程处理*/ } else {
setpgrp();
/*子进程的进程组号已修改成与它的进程号相同*/ exit(0); }
2.9.exit() 终止进程
功能:终止进程. 语法:
#include
说明:调用进程被该系统调用终止.引起附加的处理在进程被终止前全 部结束. 返回值:无
2.10.signal() 信号管理功能
功能:信号管理功能 语法:
#include
void (*signal(sig,disp))(int)
int sig;
void (*disp)(int);
void (*sigset(sig,disp))(int) int sig;
void (*disp)(int);
int sighold(sig) int sig;
int sigrelse(sig) int sig;
int sigignore(sig) int sig;
int sigpause(sig) int sig;
说明:这些系统调用提供了应用程序对指定信号的简单的信号处理. signal()和sigset()用于修改信号定位.参数sig指定信号(除了
SIGKILL和SIGSTOP,这两种信号由系统处理,用户程序不能捕捉到). disp指定新的信号定位,即新的信号处理函数指针.可以为 SIG_IGN,SIG_DFL或信号句柄地址.
若使用signal(),disp是信号句柄地址,sig不能为SIGILL,SIGTRAP
或SIGPWR,收到该信号时,系统首先将重置sig的信号句柄为SIG_DFL, 然后执行信号句柄.
若使用sigset(),disp是信号句柄地址,该信号时,系统首先将该 信号加入调用进程的信号掩码中,然后执行信号句柄.当信号句柄 运行结束
后,系统将恢复调用进程的信号掩码为信号收到前的状态.另外, 使用sigset()时,disp为SIG_HOLD,则该信号将会加入调用进程的 信号掩码中而信号的定位不变.
sighold()将信号加入调用进程的信号掩码中. sigrelse()将信号从调用进程的信号掩码中删除.
sigignore()将信号的定位设置为SIG_IGN.
sigpause()将信号从调用进程的信号掩码中删除,同时挂起调用 进程直到收到信号.
若信号SIGCHLD的信号定位为SIG_IGN,则调用进程的子进程在终 止时不会变成僵死进程.调用进程也不用等待子进程返回并做相 应处理.
返回值:调用成功则signal()返回最近调用signal()设置的disp的值. 否则返回SIG_ERR.
例子一:设置用户自己的信号中断处理函数,以SIGINT信号为例: int flag=0;
void myself()
{
flag=1;
printf(\
/*若要重新设置SIGINT信号中断处理函数为本函数则执行以 *下步骤*/ void (*a)(); a=myself;
signal(SIGINT,a); flag=2; }
main()
{
while (1) {
sleep(2000); /*等待中断信号*/ if (flag==1) {
printf(\ exit(0); }
if (flag==2) {
printf(\ printf(\ } } }
2.11.kill() 向一个或一组进程发送一个信号
功能:向一个或一组进程发送一个信号. 语法:
#include
说明:本系统调用向一个或一组进程发送一个信号,该信号由参数sig指 定,为系统给出的信号表中的一个.若为0(空信号)则检查错误但 实际上并没有发送信号,用于检查pid的有效性.
pid指定将要被发送信号的进程或进程组.pid若大于0,则信号将 被发送到进程号等于pid的进程;若pid等于0则信号将被发送到所 有的与发送信号进程同在一个进程组的进程(系统的特殊进程除 外);若pid小于-1,则信号将被发送到所有进程组号与pid绝对值 相同的进程;若pid等于 …… 此处隐藏:1746字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [资格考试]机械振动与噪声学部分答案
- [资格考试]空调工程课后思考题部分整合版
- [资格考试]电信登高模拟试题
- [资格考试]2018年上海市徐汇区中考物理二模试卷(
- [资格考试]坐标转换及方里网的相关问题(椭球体、
- [资格考试]语文教研组活动记录表
- [资格考试]广东省2006年高应变考试试题
- [资格考试]LTE学习总结—后台操作-数据配置步骤很
- [资格考试]北京市医疗美容主诊医师和外籍整形外科
- [资格考试]中学生广播稿400字3篇
- [资格考试]CL800双模站点CDMA主分集RSSI差异过大
- [资格考试]泵与泵站考试复习题
- [资格考试]4个万能和弦搞定尤克里里即兴弹唱(入
- [资格考试]咽喉与经络的关系
- [资格考试]《云南省国家通用语言文字条例》学习心
- [资格考试]标准化第三范式
- [资格考试]GB-50016-2014-建筑设计防火规范2018修
- [资格考试]五年级上册品社复习资料(第二单元)
- [资格考试]2.对XX公司领导班子和班子成员意见建议
- [资格考试]关于市区违法建设情况的调研报告
- 二0一五年下半年经营管理目标考核方案
- 2014年春八年级英语下第三次月考
- 北师大版语文二年级上册第十五单元《松
- 2016国网江苏省电力公司招聘高校毕业生
- 多渠道促家长督导家长共育和谐 - 图文
- 2018 - 2019学年高中数学第2章圆锥曲线
- 竞争比合作更重要( - 辩论准备稿)课
- “案例积淀式”校本研训的实践与探索
- 新闻必须客观vs新闻不必客观一辩稿
- 福师大作业 比较视野下的外国文学
- 新编大学英语第二册1-7单元课文翻译及
- 年产13万吨天然气蛋白项目可行性研究报
- 河南省洛阳市2018届高三第二次统一考试
- 地下车库建筑设计探讨
- 南京大学应用学科教授研究方向汇编
- 2018年八年级物理全册 第6章 第4节 来
- 毕业论文-浅析余华小说的悲悯性 - 以《
- 2019年整理乡镇城乡环境综合治理工作总
- 广西民族大学留学生招生简章越南语版本
- 故宫旧称紫禁城简介




