为什么/ bin / kill的有效信号与kill不同?

时间:2013-02-07 16:39:00

标签: bash signals kill

我正在尝试编写一个快速bash脚本来通知脚本检测到的某个条件下的程序,并且通过习惯我正在使用某些bin utils的完整路径,即/bin/rm和{ {1}}代替/bin/killrm。但是,特别是kill,我注意到我可以发送的有效信号有所不同,这让我很困惑:

kill

我也没有杀人的别名:

[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

显然,修复方法只是使用[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' ,但如果kill解析为which kill,为什么它们会有所不同?

1 个答案:

答案 0 :(得分:8)

kill是一个内置的bash。不幸的是,bash没有内置的which(就像zsh那样立即告诉我kill是一个内置的shell命令),/usr/bin/which无法知道你的shell是什么-INS。 (我希望bash具有相同的功能,可以快速检查命令是否内置。但是成功help kill足以用于交互式使用。)

正如@chepner在评论中解释的那样,type -a COMMAND可用于获取{em}中COMMAND:内置插件,别名,函数和二进制文件的可用变体列表PATH上的目录:

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