Description of problem: strace(1) incorrectly translates the second kill(2) argument from signal number to SIGRT_<N> if the argument is real-time signal. For example the following code uses SIGRTMIN+10, but strace(1) prints SIGRT_12: --- #include <stdio.h> #include <sys/types.h> #include <signal.h> int main(int argc, char **argv) { return kill(atoi(argv[1]), SIGRTMIN + 10); } --- $ sleep 1000 & [1] 9192 $ strace -e kill ./a 9192 kill(9192, SIGRT_12) = 0 ^^^^^^^^ [1]+ Real-time signal 10 sleep 1000
$ cat s.c #include <stdio.h> #include <unistd.h> #include <signal.h> int main(void) { printf("SIGRTMIN=%d, __SIGRTMIN=%d\n", SIGRTMIN, __SIGRTMIN); return kill(getpid(), SIGRTMIN + 10); } $ strace -ekill ./s SIGRTMIN=34, __SIGRTMIN=32 kill(13589, SIGRT_12) = 0 --- SIGRT_12 (Real-time signal 10) @ 0 (0) --- +++ killed by SIGRT_12 +++ Real-time signal 10 Note that SIGRTMIN != __SIGRTMIN. The first is defined by glibc, the latter is defined by kernel headers. This difference is documented in signal(7). There should be no surprise that strace prints kernel constants while strsignal(3) prints glibc constants.