我可以将pgrep与kill链接吗?


31

我注意到这|是用来将第一个命令的结果发送给另一个命令的。我想杀死所有与名称匹配的进程。
pgrep通常这样做:

$ pgrep name
5089
5105

而且似乎有多个参数可以使用kill

sudo kill 5089 5105

但这是错误的:

pgrep name | kill

那么如何正确地做呢?


3
pkill。如果不存在,kill $(pgrep ...)
Mikel 2014年

我不仅因为这些特定的命令而发问,而且还更好地了解了命令链。但是,我可以从问题得分看,意在了解问题是不受欢迎的...
托马什Zato -恢复莫妮卡

如果您想使这个问题更笼统,并确保它不是重复的,我可以投票。
Mikel 2014年

抱歉,不小心删除了我之前的评论。我在平板电脑上,这个网站的按钮非常小。
Mikel 2014年

我只是说我反对,因为你的问题似乎并没有问你不能学到的东西man pgrep。否决按钮表示问题是在没有研究成果的情况下进行的,而我在您的问题中看不到任何问题。抱歉,这似乎很苛刻。
Mikel 2014年

Answers:


42

尝试这个:

pgrep name | xargs kill

如果使用pgrep name | kill,则输出pgrep name为的标准输入kill。因为kill不会从stdin读取参数,所以这将无法工作。

使用xargs,它将为killstdin 构建参数。例:

$ pgrep bash | xargs echo
5514 22298 23079

5
与换行无关。仅仅是因为kill不会读取stdin上的参数。
Mikel 2014年

@Mikel:我的错误已修正。
cuonglm


5

回答一般而不是具体...

管道用于将一个程序的输出作为输入传递到另一程序。

看起来您正在尝试将一个程序的输出用作另一个程序的命令行参数,这是不同的。

为此,请使用命令替换

例如,如果您要运行

sudo kill 5089 5105

你有一个pgrep name输出命令5089 5105

你像把它们放在一起

sudo kill $(pgrep name)

非常感谢。我希望这也会对其他初学者有所帮助。
托马什Zato -恢复莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.