使用kill
命令,有没有办法打印到stdout
被杀死的后台进程的进程ID?通过 Google 搜索后,似乎有(在某些 Unix 或 Linux 上)一个--verbose
选项,但在 Ubuntu 20.x 或 CentOS 7.x 上似乎不可用。
如果仅使用命令无法完成此操作kill
,是否可以通过 CLI 以其他方式完成(例如使用命令kill
和其他命令)?
这是我用来终止后台进程的命令的示例:
kill $(jobs -p)
运行此示例时,如果可能的话,我希望查看正在被终止的进程 ID。
这是我在互联网上找到的:
To enable verbose logging pass the --verbose flag to the kill command.
Note that this is not supported by all shell built-ins so may not be available on your system.
kill --verbose 17146
sending signal 15 to pid 17146
更多信息:
/usr/bin/kill --verbose 8411
Usage:
kill [options] <pid|name> [...]
Options:
-a, --all do not restrict the name-to-pid conversion to processes
with the same uid as the present process
-s, --signal <sig> send specified signal
-q, --queue <sig> use sigqueue(2) rather than kill(2)
-p, --pid print pids without signaling them
-l, --list [=<signal>] list signal names, or convert one to a name
-L, --table list signal names and numbers
-h, --help display this help and exit
-V, --version output version information and exit
For more details see kill(1).
因此,在我的系统上,它显然不可用。关于解决方法或等效解决方案有什么建议吗?
解决方案:jobs -p | xargs -t kill
答案1
kill
是一个内置的外壳
$ type -a kill
kill is a shell builtin
kill is /usr/bin/kill
如果你想使用--verbose
你需要调用kill
命令
$ /usr/bin/kill --verbose 4935
sending signal 15 to pid 4935
我在SUSE 12 (util-linux 2.33.2)和Centos 8 (util-linux 2.32.1)中检查过,
verbose
是一个有效的选项。也许您的发行版已kill
使用不同的标志进行编译。作为一种解决方法,您可以-p
仅出于日志记录目的运行prints the pids
.
/usr/bin/kill --help
Usage:
kill [options] <pid>|<name>...
Forcibly terminate a process.
Options:
-a, --all do not restrict the name-to-pid conversion to processes
with the same uid as the present process
-s, --signal <signal> send this <signal> instead of SIGTERM
-q, --queue <value> use sigqueue(2), not kill(2), and pass <value> as data
-p, --pid print pids without signaling them
-l, --list[=<signal>] list signal names, or convert a signal number to a name
-L, --table list signal names and numbers
--verbose print pids that will be signaled
-h, --help display this help
-V, --version display version