[[!meta title="A Lesser-Known Feature of kill(1)"]] [[!meta author="rohieb"]] [[!meta license="CC-BY-SA 3.0"]] ## Problem ## I was debugging a program, which suddenly died with QFATAL : TestEdge::testSaveRemove() Received signal 11 For better understanding of the problem, it would be nice to know what the meaning of “signal 11” is. ## Solution ## I was not so fluent in signal numbers (maybe I should take [a course][memrise]). Of course, I _could_ dig in the [`signal(7)` man page][mansignal], or in the respective C header (`signal.h`). However, while digging in the manpages, I noticed that `kill(1)` does not only kill processes, but also does exactly what I want.[^1] Citing from the [man page][mankill]: -l, --list [signal] List signal names. This option has optional argument, which will convert signal number to signal name, or other way round. [^1]: At least the version in Debian, which is from [procps](https://gitorious.org/procps) So I could just say: $ kill -l 11 SEGV Ah, segmentation fault. Nice to know :-) In addition, the man page also mentions a useful parameter `-L`, which prints a nice table of signal numbers and mnemonics: $ /bin/kill -L 1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS 8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM 15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN 22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH 29 POLL 30 PWR 31 SYS (Also, the man page also warns about `kill` probably being a shell built-in. At least the Bash and zsh built-ins also know `-l`, but not `-L`, so you have to call `/bin/kill` explicitly.) [memrise]: http://www.memrise.com/course/158486/unix-signals/ [mansignal]: http://manpages.debian.net/cgi-bin/man.cgi?query=signal&apropos=0&sektion=7&manpath=Debian+7.0+wheezy&format=html&locale=en [mankill]: http://manpages.debian.net/cgi-bin/man.cgi?query=kill&apropos=0&sektion=0&manpath=Debian+7.0+wheezy&format=html&locale=en [[!tag UNIX Linux Debian UNIX_signal_numbers signal.h SIGSEGV kill]]