程序处理信号

1. 用程序发送信号

1.1. kill信号发送函数

原型为:

#include <sys/types.h>

#include <signal.h>

int kill(pid_t pid, int sig);

参数pid为将要接受信号的进程的pid,可以通过getpid()函数获得来给自身发送信号,还可以发送信号给指定的进程,此时pid有如下描述:

pid > 0 将信号发给ID为pid的进程

pid == 0 将信号发送给与发送进程属于同一个进程组的所有进程

pid < 0 将信号发送给进程组ID等于pid绝对值的所有进程

pid == -1 将信号发送给该进程有权限发送的系统里的所有进程

参数sig为要发送的信号

如果成功,返回0,否则为-1

示例,输入结束后,将通过发送信号SIGQUIT把自己杀掉:

#include <stdio.h>

#include <signal.h>

#include <unistd.h>

#include <sys/types.h>

int main()

{

while(1){

if(getchar()==EOF) //运行之后输入没有反应,当按下Ctrl+d(EOF),进程关闭

kill(getpid(),SIGQUIT);

}

return 0;

}

除此之外,还可以向指定的进程发送信号:

程序1:

#include <stdio.h>

int main()

{

while(1);

return 0;

}

程序2:

# include <stdio.h>

#include <signal.h>

#include <unistd.h>

#include <sys/types.h>

int main(int argc, char* argv[])

{

int pid = atoi(argv[1]);

kill(pid,SIGQUIT);

return 0;

}

首先运行程序1,然后用ps –aux查看其进程号,假设位11002。再运行程序2 ./2 11002即可

时间: 2024-10-05 14:07:02

程序处理信号的相关文章

linux驱动的异步通知(kill_fasync,fasync)---- 驱动程序向应用程序发送信号

应用程序 [cpp] view plain copy #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <poll.h> #include <signal.h> #include <sys/types.h> #include <unistd.h> #include <fcn

Linux GDB程序调试工具使用简介

GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓"寸有所长,尺有所短"就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式) 当程序被停住时,

LINUX 信号概念详解

LINUX 信号概念详解 我们运行如下命令,可看到Linux支持的信号列表: # kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP

Linux信号列表

我们运行如下命令,可看到Linux支持的信号列表:~$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) S

Linux高性能server编程——信号及应用

?? 信号 信号是由用户.系统或者进程发送给目标进程的信息.以通知目标进程某个状态的改变或系统异常. Linux信号可由例如以下条件产生: 对于前台进程.用户能够通过输入特殊的终端字符来给它发送信号.比方输入Ctrl+C一般会给进程发送一个终端信号. 2.系统异常 系统状态变化 执行kill命令或调用kill函数 Linux信号概述 发送信号 Linux下,一个进程给其它进程发送信号的API是kill函数.其定义例如以下: #include <sys/types.h> #include <

Linux系统开发6 信号

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] <大纲> Linux系统开发6 信号 linux系统有64种信号 signal man文档 终端按键信号 ctrl +c SIGIN ctrl +z SIGTSTP ctrl +\ SIGQUIT 硬件产生信号 浮点数例外信号  访问非法内存 kill()函数 信号与权限 kill()函数的pid 与返回值 信号产生原因 raise() 信号 abort() 信号 alarm() 信号 收到信号的默认操作

10.8 可靠信号术语以及语义

我们需要定义一些术语来继续信号的讨论,首先,信号是在造成信号的事件出现的时候由进程产生或者被发送到进程的,该事件可能是硬件错误(比如说除零错误),软件条件(比如说alarm设置的时间达到),或者是终端信号,或者是kill函数的调用,当信号产生的时候,内核通常在进程表中设置一些标志. 我们所说的”信号被发送到一个进程”是在进程准备执行信号处理函数的时候,在信号生成和被发送之间的时候,信号被称为pending. 进程可以选择阻塞信号的发送,如果一个被阻塞的信号产生,那么信号就会保持挂起状态直到如下条

Linux高性能服务器编程——信号及应用

 信号 信号是由用户.系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常.Linux信号可由如下条件产生: 对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号.比如输入Ctrl+C通常会给进程发送一个终端信号. 2.系统异常 系统状态变化 运行kill命令或调用kill函数 Linux信号概述 发送信号 Linux下,一个进程给其他进程发送信号的API是kill函数.其定义如下: #include <sys/types.h> #include <sign

信号处理程序(signal handler)会被重置的信号

首先说明我的系统,CentOS 6.6,内核为2.6.32-504.12.2.el6.i686. 当用signal对某个信号设定信号处理函数的时候,有些信号的处理函数会被重置,有些则不会,这种情况的具体说明我还没有找到,这里我就先列一下我找到的几个信号. 信号处理程序会被重置的信号: 1. SIGALRM 比如下面这段代码,这段代码的作用就是给自己发送SIGALRM信号,直到发送了NUM次. 1 #include <errno.h> 2 #include <pwd.h> 3 #in