分析下列程序中信号的处理机制(在每行代码后添加注释)并写出程序的运行结果
答案:2 悬赏:10 手机版
解决时间 2021-11-22 15:12
- 提问者网友:我们很暧昧
- 2021-11-22 01:11
分析下列程序中信号的处理机制(在每行代码后添加注释)并写出程序的运行结果
最佳答案
- 五星知识达人网友:梦中风几里
- 2021-11-22 01:41
#include
#include
#include
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
#include
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对应的信号值。
全部回答
- 1楼网友:我住北渡口
- 2021-11-22 02:08
好几个函数都没有,怎么分析啊?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯