
【linux 学习笔记-14】基本进程通信--信号(2009-03-16 15:10:10)
标签 : linux 进 程 通 信 信 号 signal() sigaction() kill() raise()
alarm() it
分类:
学习公社
信号是进程之间通信的另外一种方式。之前用过 kill -l 看了 Linux 系统支持的所有信号,
这些信号在 sys/signal.h 中定义,系统支持 64 种信号。除了系统内核和 root 之外,只有
具备相同 uid、gid 的进程才可以使用信号进行通信。
gaolu@gaolu-desktop:~$ 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 16) SIGSTKFLT //本次程序提到信号
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
gaolu@gaolu-desktop:~$
1、信号的产生
(1)kill 函数
函数调用形式为 int kill(pid_t pid,int sig),表示向进程 pid 发送信号 sig。这个函数之前
用过,不再介绍。
函数执行成功返回 0,失败返回-1.
(2)raise 函数
该 函 数 用 于 给 调 用 进 程 自 身 发 送信 号 , 调 用 形 式 为 int raise(int sig); 等 同与 调用
kill(getpid(),sig).
函数执行成功返回 0,失败返回非零数值。
(3)alarm 函数
该函数用于给进程设置告警时钟,时钟(单位为秒)到达后,给进程发送 SIGALARM 信
号。默认处理方式为进程直接终止运行,也可以修改捕捉信号后的默认处理函数。
【程序实例】
//连续创建 5 个子进程,分别给 5 个子进程设置告警时钟 1-5 秒,时钟到达时,捕捉到
SIGALARM 信号,采用默认处理方式,直接终止执行;捕捉到信号之前用 pause 挂起进
程,使其处于等待状态;由于捕捉信号以后的默认处理就是终止,因此不需要显式的调用
_exit 等函数。