????????????????????????????????????????????????????????? 信號
?
信號是在軟件層次上對中斷機制的一直模擬,是一種異步通信方式
?
linux內核通過信號通知用戶進程, 不同的信號類型代表不同的事件
?
進程對信號有不同的響應方式
缺省方式
忽略信號
捕捉信號
SIGKILL和SIGSTOP這兩個信號量 級別很高 只能執行默認操作 不能被捕捉和忽略
?
kill [-signal] pid
pid 發送對象(進程號或進程組 -1 代表除當前進程和int進程之外 其他都發送該信號)
-signal 可指定信號
?
向一個進程發送信號(默認發送15信號 也就是結束進程)
?
killall [-u user | prog]
prog指定進程號
-u user 指定用戶名
默認發送信號15
?
??????????????????????????????????????????????? 發送信號
?
#include <unistd.h>
#include <signal.h>
?
int kill(pid_t pid, int sig);
int raise(int sig);(只能向當前進程發信號)
?
成功返回0 失敗返回EOF
pid 接收進程的進程號· 0代表同組進程 -1代表所有進程
sig 信號類型
·
int alarm(unsinged int seconds)
成功返回上一個定時器的剩余時間 失敗返回EOF
seconds 定時器的時間 如果值為0 代表取消這個定時器
一個進程中只能設置一個定時器 時間到時 產生SIGALRM(默認結束進程)
?
int pause(void)
進程一直阻塞 直到被信號中斷
被信號中斷后 返回-1 error為EINTR
?
???????????????????????????????????????????? 設置信號響應方式
?
#include <unistd.h>
#include <signal.h>
void (*signal(int signo, void (*handler)(int)))(int);
?
成功返回原先的信號處理函數 失敗返回 SIG_ERR
sigo 要設置的信號類型
handler 指定的信號處理函數: SIG_DFL代表缺省方式
SIG_IGN代表忽略信號
????????????????????????????????????????????????????????????????????????? 代碼示例