当前位置: 技术问答>linux和unix
向各位求助:关于signal函数
来源: 互联网 发布时间:2015-09-29
本文导语: 这个signal函数我搞了好久,还是不明白:他的工作过程究竟是怎么样的? 比方说下面的程序为一个子进程执行过程: { 1. wait_flag = 1; 2. signal(16,stop); 3. while(wait_flag) ; 4. printf("n Child...
这个signal函数我搞了好久,还是不明白:他的工作过程究竟是怎么样的?
比方说下面的程序为一个子进程执行过程:
{
1. wait_flag = 1;
2. signal(16,stop);
3. while(wait_flag) ;
4. printf("n Child process 1 is killed by parent !!n");
5. exit(0);
}
我先说一下我自己的理解:
当这个子进程执行到第2句时,它不会停在那里等待信号16到达,而是继续往下走.signal函数就开始监视信号16是否到达,当信号16到达,不管这个子进程执行到了哪里,只要还没退出子进程,他就转去执行stop函数.
请问我这样理解对吗?
另外,signal函数是不是第一次执行的时候不管信号16是否到达,都要先执行一遍stop函数的?(应该不会吧?)
麻烦大家讲一下这个signal函数到底是怎么工作的好吗?谢谢各位了!
比方说下面的程序为一个子进程执行过程:
{
1. wait_flag = 1;
2. signal(16,stop);
3. while(wait_flag) ;
4. printf("n Child process 1 is killed by parent !!n");
5. exit(0);
}
我先说一下我自己的理解:
当这个子进程执行到第2句时,它不会停在那里等待信号16到达,而是继续往下走.signal函数就开始监视信号16是否到达,当信号16到达,不管这个子进程执行到了哪里,只要还没退出子进程,他就转去执行stop函数.
请问我这样理解对吗?
另外,signal函数是不是第一次执行的时候不管信号16是否到达,都要先执行一遍stop函数的?(应该不会吧?)
麻烦大家讲一下这个signal函数到底是怎么工作的好吗?谢谢各位了!
|
不会。signal仅在信号到达时执行,可以理解为高级的中断。
如果信号处理函数中没有再次注册该处理函数,处理函数将仅执行一次。
如果信号处理函数中没有再次注册该处理函数,处理函数将仅执行一次。
|
当这个子进程执行到第2句时,它不会停在那里等待信号16到达,而是继续往下走.signal函数就开始监视信号16是否到达,当信号16到达,不管这个子进程执行到了哪里,只要还没退出子进程,他就转去执行stop函数.
请问我这样理解对吗?
算对吧 不过signal是安装新的信号处理函数
另外,signal函数是不是第一次执行的时候不管信号16是否到达,都要先执行一遍stop函数的?(应该不会吧?)
所以他也就不会在signal时执行 安装的函数
请问我这样理解对吗?
算对吧 不过signal是安装新的信号处理函数
另外,signal函数是不是第一次执行的时候不管信号16是否到达,都要先执行一遍stop函数的?(应该不会吧?)
所以他也就不会在signal时执行 安装的函数
|
父进程发16号信号给子进程
子进程接收信号的方式不是阻塞的
而是类似于中断的处理方式
子进程接收信号的方式不是阻塞的
而是类似于中断的处理方式
|
?