我正在运行一个简单的脚本,它将获取kill 命令的输出并将其打印到文件中。然而,在尝试更好/更深入或更有趣的结果时,我意识到该命令,
kill -l
给出与命令不同的输出,
sudo kill -l
我认为提供 sudo 权限意味着您通常能够访问/查看更多信息(因为它授予更多权限和所有内容)。然而,在这种情况下,似乎获得了几乎完全不同的输出。
我希望有人可以解释第二个命令的输出,并阐明如何/为什么产生不同的输出。后续问题是这个功能是kill命令独有的,还是有人遇到过更多提供这样输出的命令。
kill -l
vs 的输出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 内置实现和外部实现的实用程序都可以获得类似的结果。只是数量不多。echo
但printf
Bash 的内置版本与 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
主要是,如果您达到进程数量限制,则无法启动新进程来终止其他进程。