当前位置:  技术问答>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)执行?

|



看来你还是没搞清楚信号的意思。
二楼已经说了 :signal是注册信号处理函数,不是执行信号处理函数.
也就是说
你的这两行代码执行后
  signal(SIGINT,my_func);
  signal(SIGQUIT,my_func);
只是注册了两个处理函数,什么意思呢?就是说如果你的这个进程受到这两个信号,就转去执行,my_func这个函数。
由于执行这两行之后有个pause函数
这个pause函数会一直阻塞(你现在姑且当做无限循环理解吧),直到这个进程收到一个信号。

而你从另一个控制台输入的那个命令,实际上就是给这边这个进程发了一个信号,这边这个进程收到信号就会执行myfunc,就输出了你看到的那个。当然pause也不再阻塞。

具体的你可以看一下三楼从linux下man出来的解释。

|
signal是注册信号处理函数,不是执行信号处理函数.

    
 
 

您可能感兴趣的文章:

  • 刚接触GCC,请教一个问题!
  • 刚接触linux和GCC,请教一个问题
  • 初次接触linux,关于linux 用户权限问题请教!
  • 请教:本人刚刚接触linux c编程,有一个问题
  • 刚接触apache,请教win2000下的安装配置的问题
  • 初接触者:请教安装问题!
  • 接触Linux,有几点疑惑的地方请教一下~~~
  • 刚接触大型机的TSO,有些名词不太懂,请教一下
  • 刚到一新单位,用java做网管程序,可我以前从没接触过java,不懂,100分请教
  • 很简单的多线程互斥,刚接触请教大家
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • 初接触linux,高分求教linux下C++编程。
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • 小弟要接触Linux编程了,请大家给点建议
  • 我还没有接触过linus编程。 我听说很吃香的。 我也想学。 各位大虾有什么好的意见么
  • 因进修,需要学习《Unix 环境高级编程》一书,完全没接触过Unix/Linux,请推荐一个学习环境。
  • 刚接触Linux,关于linux下c++编程的问题,请高手解答,多谢了!
  • 求一个进程守护程序,才疏学浅接触unix c编程时间不长,请高人帮忙
  • 小弟才接触QT编程,但是环境都没打建成功。希望高手指点下。
  • 编译通过但连接有问题,刚接触LINUX编程,我想这个问题应该很简单,可我 还是不会~! 求教~!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎么用javamail发送附件,小弟刚接触,请各位大侠指教,谢谢!!!
  • 初次接触,怎么在FreeBSD中使用C/C++?
  • 刚接触SUSE, 请问在它下边怎么用SVN,Bugzilla
  • linux我刚接触,我装了linux后,却把用户名和口令忘了,还有办法进却吗
  • 作为一个刚刚接触linux的新手来说,应该如何学习?从哪里开始?谢谢高手赐教!
  • 刚接触ubuntu ,一些概念有点乱,谁帮我理一下
  • 有接触过db2的高手吗?请问安装完后管理员的用户名和口令?
  • 小弟刚接触java,不知道大家现在都用什么编译源程序?
  • 刚接触javamail,高分问一些简单的问题
  • 以前没有接触过linux,现要在linux上写一个软件,请问我要看那些资料!
  • 刚接触JSP,有问题。
  • 想接触linux大家指点一下
  • 刚接触linux的新手的提问?
  • 脚本接触的太少,能帮忙解释一下,这句话是干什么的吗?
  • 我想接触一下LINUX的内核心,哪个版本比较合适哦.
  • 小弟刚刚准备接触LINUX,达人们进来啊谢谢了哦
  • 开始接触学习内核,新手提问!!很简单的,来得分吧
  • 初学Linux ,问一下应该接触什么版本的比较适合
  • 刚接触linux,发现安装好后通过grep memtotal查询发现比实际物理内存小。
  • 刚接触linux,ubuntu字符模式下一些显示乱码?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3