![我可以将 pgrep 与 Kill 链接起来吗?](https://linux22.com/image/38482/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%B0%86%20pgrep%20%E4%B8%8E%20Kill%20%E9%93%BE%E6%8E%A5%E8%B5%B7%E6%9D%A5%E5%90%97%EF%BC%9F.png)
我注意到它|
用于将第一个命令的结果发送到另一个命令。我想杀死所有与名称匹配的进程。
这是 pgrep 通常所做的:
$ pgrep name
5089
5105
并且多个参数似乎适用于kill
:
sudo kill 5089 5105
但这是错误的:
pgrep name | kill
那么如何正确去做呢?
答案1
尝试这个:
pgrep name | xargs kill
如果您使用pgrep name | kill
, 的输出pgrep name
将馈送到 的 stdin kill
。因为kill
不从 stdin 读取参数,所以这不起作用。
使用xargs
,它将kill
从标准输入构建参数。例子:
$ pgrep bash | xargs echo
5514 22298 23079
答案2
这应该有效:
pkill name
我还建议阅读手册页。
答案3
回答一般性问题而不是具体问题...
管道用于将一个程序的输出传递为输入到另一个程序。
看起来您正在尝试将一个程序的输出用作命令行参数到另一个程序,这是不同的。
为此,请使用命令替换。
例如,如果你想运行
sudo kill 5089 5105
你有一个pgrep name
输出的命令5089 5105
你把它们放在一起就像
sudo kill $(pgrep name)