/usr/bin/kill -L
印刷:
1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 6 IOT 7 BUS 8 FPE 9 KILL 10 USR1
11 SEGV 12 USR2 13 PIPE 14 ALRM 15 TERM 16 STKFLT 17 CHLD 17 CLD 18 CONT 19 STOP 20 TSTP
21 TTIN 22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH 29 IO 29 POLL 30 PWR
31 SYS 34 RTMIN 64 RTMAX
现在我希望能够通过信号的数量打印“11 SEGV”,“12 USR2”或“SEGV”,“USR2”(两种解决方案都可以) - 使用sed。
我这样做了/usr/bin/kill -L|sed -n "s/\(^\| \)11 \([^ ]\+\)\+/<<\2>>/;s/.*<<\([^>]\+\)>>.*/\1/p"
- 它输出“SEGV”为 11。
但问题是 - 是否可以做得更简单,而不需要第二次替换?
答案1
你可以跑步
/usr/bin/kill -L | grep -o '[0-9]\+ [A-Z0-9]\+'
用换行符分隔信号,然后轻松grep
使用grep -w "^$NUM"
.
或者更容易使用kill -l "$NUM"
;-)
$ kill -l 11
SEGV