设为首页 加入收藏

TOP

Linux 两组信号对比
2015-07-16 12:56:34 来源: 作者: 【 】 浏览:3
Tags:Linux 信号 对比

之前看信号的时候,没有太注意不同信号的对比.今天再次看到的时候,突然感觉对一些信号,非常相似,乃至非常容易混淆.今天周末就抽空总结一下.


第一组 关闭进程信号


常见的4中关闭进程信号是SIGKILL,SIGINT,SIGTERM,SIGQUIT.


键盘快捷键最大的好处就是发给所有的进程。


最下面我们用程序来验证一下。


第一组 关闭进程信号 程序验证?


先上代码。



#include


#include


#include


#include


void process(int signo){


? ? printf("signo:%d,pid:%d\n",signo,getpid());


}


?


void cleanup(){


? ? printf("cleanup,pid:%d\n",getpid());


}


?


int main()


{


? ? pid_t pid;


? ? atexit(cleanup);


? ? signal(SIGINT, process);


? ? signal(SIGTERM, process);


? ? //signal(SIGQUIT, process);


? ? if( (pid = fork()) == 0 )


? ? {


? ? ? ? printf("child pid:%d\n",getpid());


? ? ? ? while(1){


? ? ? ? ? ? sleep(1);


? ? ? ? }


? ? }else{


? ? ? ? printf("parent pid:%d\n",getpid());


? ? ? ? while(1){


? ? ? ? ? ? sleep(1);


? ? ? ? }


? ? }


? ? return 0;


}


SIGKILL比较简单,我们就不再验证了。先验证一下SIGINT。



可以看到输入ctrl+c的时候,父子进程都收到相关的信号。但是我输入kill -2 742的时候,只有父进程收到了,不会传给子进程。


下面我们验证SIGQUIT产生core。



可能部分的机器默认是不产生,我们需要输入几个命令。


#设置core文件大小,这里是无限制


ulimit -c unlimited


#core后面跟着pid


sudo sysctl kernel.core_uses_pid=1


#core文件存放路径,放在当前的文件夹下


sudo sysctl kernal.core_pattern=core


第二组 停止信号


这组信号对比,相对上一组就简单多了.


SIGSTOP,程序挂起,没有相应的快捷键,不能被捕获以及忽略。


SIGTSTP,程序挂起,快捷键ctrl+z,可以被捕获以及忽略。


如果挂起之后,怎么再次让他们启动呢。简单一点,我们可以输入jobs,然后看一下他们的索引值。然后fg启动他们。



我们也可以给他们发送SIGCONT信号,让他们启动起来。不过这个时候,他们的只能在后台运行了。



这个时候,就可以看到他们的状态从T变成了S,从停止变成了运行状态。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇快速排序的递归方式和非递归方式 下一篇二叉树中和为某一值的路径

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: