### 信號
我們知道信號是進程間通信的其中一種方法,當然也可以是內核給進程發送的消息,注意信息只是告訴進程發生了什么事件,而不會傳遞任何數據。
這是進程這個概念設計時就考慮到的了,因為我們希望控制進程,就像一個小孩我們想他按我們的想法做,前提就是他能夠接受信號并且理解信號的含義。
### 信號種類
Linux中定義了很多信號,不同的Unix-like系統也不一樣,我們可以通過下面的命令來查當前系統支持的種類。
~~~
? kill -l
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2
~~~
其中1至31的信號為傳統UNIX支持的信號,是不可靠信號(非實時的),32到63的信號是后來擴充的,稱做可靠信號(實時信號)。不可靠信號和可靠信號的區別在于前者不支持排隊,可能會造成信號丟失,而后者不會。
簡單介紹幾個我們最常用的,在命令行中止一個程序我們一般摁Ctrl+c,這就是發送SIGINT信號,而使用kill命令呢?默認是SIGTERM,加上`-9`參數才是SIGKILL。
### 編程實例
~~~
import os/signal
siganl.Notify()
signal.Stop()
~~~
這是Go封裝的信號接口,我們可以以此實現一個簡單的信號發送和處理程序。
- 前言
- 致謝
- 概述
- 使用代碼
- 使用Docker
- 進程基礎
- 進程是什么
- Hello World
- PID
- PPID
- 使用PID
- 進程名字
- 進程參數
- 輸入與輸出
- 并發與并行
- 進程越多越好
- 進程狀態
- 退出碼
- 進程資源
- 死鎖
- 活鎖
- POSIX
- Nohup
- 運行進程
- Go編程實例
- 衍生新進程
- 執行外部程序
- 復制進程
- 進程進階
- 文件鎖
- 孤兒進程
- 僵尸進程
- 守護進程
- 進程間通信
- 信號
- Linux系統調用
- 文件描述符
- Epoll
- 共享內存
- Copy On Write
- Cgroups
- Namespaces
- 項目實例Run
- 項目架構
- 代碼實現
- 注意事項
- 創建目錄權限
- 捕獲SIGKILL
- Sendfile系統調用
- 后記
- 參考書籍
- 項目學習
- 再次感謝