文章目錄
- 八、進程信號
- 1.信號
- 未完待續
八、進程信號
1.信號
信號和信號量之間沒有任何關系。信號是Linux系統提供的讓用戶/進程給其他進程發送異步信息的一種方式。
常見信號:
當信號產生時,可選的處理方式有三種:①忽略此信號。②執行該信號的默認處理動作。③自定義處理信號,這種方式稱為捕捉(Catch)一個信號。
可以使用 kill -9 殺掉指定進程。
kill -2 可以終止指定進程。不是殺死的。
接下來我們讓進程對2號信號做出自定義行為。需要使用 signal 函數。
Makefile:
testSig:Signal.ccg++ -o $@ $^ -std=c++11
.PHONY:clean
clean:rm -f testSig
Signal.cc:
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
using namespace std;void handler(int signo)
{// 打印收到的信號cout << "get a signal : " << signo << endl;
}int main()
{signal(SIGINT, handler);while (true){cout << "I am activing, pid : " << getpid() << endl;sleep(1);}return 0;
}
此時進程當接收到2號信號時,就輸出了一句話并沒有終止進程。
// 忽略信號 ignoresignal(SIGINT, SIG_IGN);
當 signal 函數這樣設置時,就代表將 SIGINT 信號忽略。
信號可以由 kill 命令產生,也能夠從鍵盤上產生。比如 鍵盤上的 Ctrl + C 會被操作系統解釋成2號信號。