分析下列程序中信号的处理机制(在每行代码后添加注释)并写出程序的运行结果
分析下列程序中信号的处理机制(在每行代码后添加注释)并写出程序的运行结果#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);
}
} 展开
#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);
}
} 展开
2个回答
展开全部
#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对应的信号值。
#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对应的信号值。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好几个函数都没有,怎么分析啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询