当前位置: 技术问答>linux和unix
刚接触linux环境编程,关于signal()和pause()的问题,请教高手
来源: 互联网 发布时间:2017-02-08
本文导语: #include #include #include void my_func(int sign_no) { if(sign_no ==SIGINT) printf("i have get SIGINTn"); else if(sign_no == SIGQUIT) printf("i have get SIGQUITn"); } int main() { printf("waiting for signal SIGINT or S...
#include
#include
#include
void my_func(int sign_no)
{
if(sign_no ==SIGINT)
printf("i have get SIGINTn");
else if(sign_no == SIGQUIT)
printf("i have get SIGQUITn");
}
int main()
{
printf("waiting for signal SIGINT or SIGQUITn");
signal(SIGINT,my_func);
signal(SIGQUIT,my_func);
pause();
exit(0);
}
在一终端输入./a.out,执行到pause()时,然后在另一终端输入kill -s SIGINT 进程ID后,终端输出i have get SIGINT。我的困惑时:程序是顺序执行,为什么此时又回到signal(SIGINT,my_func)执行?
#include
#include
void my_func(int sign_no)
{
if(sign_no ==SIGINT)
printf("i have get SIGINTn");
else if(sign_no == SIGQUIT)
printf("i have get SIGQUITn");
}
int main()
{
printf("waiting for signal SIGINT or SIGQUITn");
signal(SIGINT,my_func);
signal(SIGQUIT,my_func);
pause();
exit(0);
}
在一终端输入./a.out,执行到pause()时,然后在另一终端输入kill -s SIGINT 进程ID后,终端输出i have get SIGINT。我的困惑时:程序是顺序执行,为什么此时又回到signal(SIGINT,my_func)执行?
|
看来你还是没搞清楚信号的意思。
二楼已经说了 :signal是注册信号处理函数,不是执行信号处理函数.
也就是说
你的这两行代码执行后
signal(SIGINT,my_func);
signal(SIGQUIT,my_func);
只是注册了两个处理函数,什么意思呢?就是说如果你的这个进程受到这两个信号,就转去执行,my_func这个函数。
由于执行这两行之后有个pause函数
这个pause函数会一直阻塞(你现在姑且当做无限循环理解吧),直到这个进程收到一个信号。
而你从另一个控制台输入的那个命令,实际上就是给这边这个进程发了一个信号,这边这个进程收到信号就会执行myfunc,就输出了你看到的那个。当然pause也不再阻塞。
具体的你可以看一下三楼从linux下man出来的解释。
|
signal是注册信号处理函数,不是执行信号处理函数.