Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do valid signals for /bin/kill differ from kill?

Tags:

bash

kill

signals

I'm trying write a quick bash script to signal a program under a certain condition detected by the script, and by force of habit I'm using the full path to some bin utils, i.e. /bin/rm and /bin/kill in lieu of rm and kill. With kill in particular, though, I noticed a difference in the valid signals I can send, and it's confusing me:

[root@linux]# which kill
/bin/kill

[root@linux]# /bin/kill -l
HUP INT QUIT ILL ABRT FPE KILL SEGV PIPE ALRM TERM USR1 USR2 CHLD CONT
STOP TSTP TTIN TTOU TRAP IOT BUS SYS STKFLT URG IO POLL CLD XCPU XFSZ
VTALRM PROF PWR WINCH UNUSED

[root@linux]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

I don't have any aliases for kill either:

[root@linux]# alias 
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

Obviously the fix is to just use kill, but why are they different if which kill resolves to /bin/kill anyway?

like image 451
rutgersmike Avatar asked Dec 26 '22 09:12

rutgersmike


1 Answers

kill is a bash built-in. Unfortunately, bash has no built-in which (like zsh which tells me immediately that kill is a built-in shell command), and /usr/bin/which has no way to know of your shell built-ins. (I hope that bash has something equivalent for quick checks whether command is built-in or not. Successfull help kill is enough for interactive use, though).

As explained by @chepner in a comment, type -a COMMAND can be used to get a list of available variants for the COMMAND: built-ins, aliases, functions, and binaries in any directory on PATH:

$ type -a kill
kill is a shell builtin
kill is /bin/kill
like image 196
Anton Kovalenko Avatar answered Jan 08 '23 07:01

Anton Kovalenko