linux信号

来源:互联网 发布:关系图算法 编辑:程序博客网 时间:2024/06/01 08:45

和进程退出相关的信号

向进程发送信号导致进程异常退出

调用函数kill()发送信号

 #include <sys/types.h>  #include <signal.h>  int kill(pid_t pid, int sig);

调用函数 kill() 后,进程进入内核态向目标进程发送指定信号;目标进程在接收到信号后,默认信号处理程序被调用,进程异常退出。

用kill命令发送信号
kill SIGx PID
在实现上,kill 命令也是调用 kill 系统调用函数来发送信号。

在终端使用键盘发送信号
常见的中断字符组合是,使用 control-C 发送 SIGINT 信号,使用 control-\ 发送 SIGQUIT 信号,使用 control-z 发送 SIGTSTP 信号。


代码错误导致进程运行时异常退出

信号与进程异常退出有着紧密的关系:第一类情况是因为外部环境向进程发送信号,这种情况下发送的信号是异步信号,信号的到来与进程的运行是异步的;第二类情况是进程非法操作触发处理器异常,然后异常处理函数在内核态向进程发送信号,这种情况下发送的信号是同步信号,信号的到来与进程的运行是同步的。这两种情况都有信号产生,并且最终都是信号处理程序终止进程运行。它们的区别是信号产生的信号源不同,前者是外部信号源产生异步信号,后者是进程自身作为信号源产生同步信号。
所以,信号是进程异常退出的直接原因。当进程异常退出时,进程必然接收到了信号。

有一个问题保留着,不知道哪位大侠知道相关的函数,能够显示程序收到的所有的信号。


参考文章

  1. 详谈 UNIX 环境进程异常退出
  2. 2.
0 0
原创粉丝点击