当前位置: 技术问答>linux和unix
linux编程中简单的信号处理问题,请教各位,谢谢。
来源: 互联网 发布时间:2014-10-31
本文导语: 例:main() { void sigcatcher(int); ... signal(SIGIN,sigcatcher); //1 signal(SIGQUIT,sigcatcher); ... } void sigcatcher(signum) { ... if (signum==SIGQUI...
例:main()
{
void sigcatcher(int);
...
signal(SIGIN,sigcatcher); //1
signal(SIGQUIT,sigcatcher);
...
}
void sigcatcher(signum)
{
...
if (signum==SIGQUIT)
exit(1);
sleep(2);
signal(signum,sigcatcher); //2
...
}
1.最大的疑惑,在程序执行时设置了signal后,它是什么状态,如果不是等待,那如果在它执行结束前都没有收到SIGINT或SIGQUIT信号,是不适就这样结束了。如果收到SIGINT信号,传入sigcatcher的参数值是不是SIGINT?
2.就是这儿把我搞糊涂的,如果程序状态不是等待这有什么用?
我学LINUX不久,在信号处理这儿已经困惑了好几天了,望各位高手赐教!!!
我现在最高只能加25分,对不起了!:(
{
void sigcatcher(int);
...
signal(SIGIN,sigcatcher); //1
signal(SIGQUIT,sigcatcher);
...
}
void sigcatcher(signum)
{
...
if (signum==SIGQUIT)
exit(1);
sleep(2);
signal(signum,sigcatcher); //2
...
}
1.最大的疑惑,在程序执行时设置了signal后,它是什么状态,如果不是等待,那如果在它执行结束前都没有收到SIGINT或SIGQUIT信号,是不适就这样结束了。如果收到SIGINT信号,传入sigcatcher的参数值是不是SIGINT?
2.就是这儿把我搞糊涂的,如果程序状态不是等待这有什么用?
我学LINUX不久,在信号处理这儿已经困惑了好几天了,望各位高手赐教!!!
我现在最高只能加25分,对不起了!:(
|
1.系统设置了signal之后,当然不会处于等待状态。只有在执行结束之前,收到SIGINT信号(按Ctrl_C就可以发出)或SIQUIT信号(Ctrl+D),才会走到sigcatcher的处理。
2.这句话是说,当收到值是signum时(SIGINT或SIGQUIT),重新设置信号处理函数。这里有一个基本概念,就是使用Signal函数只起一次作用,如果想多次使用,必须在收到之后,重新设置。
2.这句话是说,当收到值是signum时(SIGINT或SIGQUIT),重新设置信号处理函数。这里有一个基本概念,就是使用Signal函数只起一次作用,如果想多次使用,必须在收到之后,重新设置。