在 Ubuntu 中使用“kill”命令

在 Ubuntu 中使用“kill”命令

我正在运行一个简单的脚本,它将获取kill 命令的输出并将其打印到文件中。然而,在尝试更好/更深入或更有趣的结果时,我意识到该命令,

kill -l

给出与命令不同的输出,

sudo kill -l

我认为提供 sudo 权限意味着您通常能够访问/查看更多信息(因为它授予更多权限和所有内容)。然而,在这种情况下,似乎获得了几乎完全不同的输出。

我希望有人可以解释第二个命令的输出,并阐明如何/为什么产生不同的输出。后续问题是这个功能是kill命令独有的,还是有人遇到过更多提供这样输出的命令。

kill -lvs 的输出sudo kill -l

anant@anant-VirtualBox:~$ 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
anant@anant-VirtualBox:~$ sudo kill -l
[sudo] password for anant:
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
anant@anant-VirtualBox:~$

答案1

$ type kill
kill is a shell builtin

运行只是kill -l运行 shell 的内置版本。但sudo不通过 shell 运行其命令,因此改为通过 findsudo kill -l运行。本质上相同的实用程序的两种不同实现,它们只是具有稍微不同的./bin/kill$PATH-l

使用任何具有 shell 内置实现和外部实现的实用程序都可以获得类似的结果。只是数量不多。echoprintfBash 的内置版本与 GNU coreutils 中的版本类似,至少除了以下几点:

$ echo --help              # Bash
--help
$ /bin/echo --help         # coreutils  
Usage: /bin/echo [SHORT-OPTION]... [STRING]...
  or:  /bin/echo LONG-OPTION
Echo the STRING(s) to standard output.
...

(两者也有printf --help,具有不同的文本。)

shell 具有内置版本的原因kill主要是,如果您达到进程数量限制,则无法启动新进程来终止其他进程。

相关内容