分析下列程序中信号的处理机制(在每行代码后添加注释)并写出程序的运行结果

分析下列程序中信号的处理机制(在每行代码后添加注释)并写出程序的运行结果#include<stdio.h>#include<signal.h>#include<wait.... 分析下列程序中信号的处理机制(在每行代码后添加注释)并写出程序的运行结果#include<stdio.h>
#include<signal.h>
#include<wait.h>
void handle_sigcld(int signo)
{
int pid,status;
pid=wait(&status);
printf("receive signal %d\n",signo);
printf("child process exit with code %d\n",WEXITSTATUS(status));
}
main()
{
int i,pid;
signal(SIGCLD,Handle_sigcld);
if((pid=fork())==0)
{
printf("child process exit \n");
exit(1);
}
else
{
sleep(1);
exit(0);
}
}
展开
 我来答
kwydwuf
2010-11-08 · TA获得超过7411个赞
知道大有可为答主
回答量:1527
采纳率:71%
帮助的人:2016万
展开全部
#include<stdio.h>
#include<signal.h>
#include<wait.h>
void handle_sigcld(int signo) //用户自己写的信号处理函数
{
int pid,status;
pid=wait(&status); //获取子进程的结束状态
printf("receive signal %d\n",signo); //打印信号值
printf("child process exit with code %d\n",WEXITSTATUS(status)); // 打印子进程返回值(即exit值)
}

main()
{
int i,pid;
signal(SIGCLD,Handle_sigcld); //注册SIGCLD这个信号对应的处理函数为Handle_sigcld,就是你前面写的那个函数(这里的H不应该大写)。当子进程结束时,操作系统会自动向父进程发SIGCLD这个信号

if((pid=fork())==0) //fork,创建子进程
{
printf("child process exit \n"); //子进程打印并退出,eixt值为1
exit(1);
}
else
{
sleep(1); //父进程,sleep1秒,从而能收到 SIGCLD信号。
exit(0);
}
}

程序输出很简单,就是:

child process exit
receive signal 17
child process exit with code 1

17就是SIGCLD对应的信号值。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pigwang_bj
2010-10-26 · 超过23用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:60.9万
展开全部
好几个函数都没有,怎么分析啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式