Why are the valid signals for / bin / kill different from kill?

I am trying to write a quick bash script to signal a program at a specific state detected by the script, and out of habit I use the full path to some of the binaries, i.e. /bin/rm

and /bin/kill

instead of rm

and kill

. However, with help kill

I noticed a difference in the valid signals that I can send and this is 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:

[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 it kill

, but why are they different if which kill

allowed before /bin/kill

anyway?

+3


source to share


1 answer


kill

is bash builtin. Unfortunately bash doesn't have a built-in which

(like the one zsh

that immediately tells me that kill is a shell built-in), and /usr/bin/which

has no way of knowing about your shell built-in. (I hope it bash

has something equivalent for quick checks to see if a command is inline or not. Successfull is help kill

good enough for interactive use though).

As @chepner explained in a comment, type -a COMMAND

can be used to get a list of available choices for COMMAND

: builtins, aliases, functions, and binaries in any directory on PATH

:



$ type -a kill
kill is a shell builtin
kill is /bin/kill

      

+7


source







All Articles