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 列出所有信号