Unix `/proc/$/status` 的数据格式是如何设计的?
如果运行 cat /proc/$$/status | grep Sig
,你会看到当前进程的关于如何处理信号的配置。
- SigQ: 进程 real user id 的信号队列中的信号数量
- SigPnd: Pending 的信号数量
- SigBlk: 堵塞的信号
- SigLg: 忽略的信号
- SigCgt: 捕获的信号
如果见到 SigCgt: 000000004b817efb
,并不是说捕获了 4b817efb 个信号,而是说当前进程想要捕获哪些信号。这个数字可以转化为 01001011 10000001 01111110 11111011
,其中每个比特位代表一种信号类型,例如最后的 1 是 SIGHUP, 倒数第二个 1 是 SIGINT。
如果想要忽略 ctrl-c, 就可以用 signal(SIGINT, SIG_IGN);
告诉操作系统忽略 SIGINT。
- 命令行发送 TERM 信号:
kill $pid
- 根据进程名字发送 TERM 信号:
kill someproc
- 发送特定信号:
kill -9 $pid
/kill -KILL $pid
/kill -SIGKILL $pid
- 可以用
kill -L
列出所有信号