连接多个命令的输出,并将它们用作另一个命令的输入

时间:2020-05-27 02:16:31

标签: linux bash shell

我试图弄清楚如何获取多个进程的pid列表:

pidof proc1

1234 4321 7665

pidof proc2

3312 445

并使用所有这些pid,其中有多个进程的多个实例,并将它们组合在一起,然后将其全部馈入kill命令。由于kill可以将多个pid作为输入,因此我希望没有for-each循环就可以做到这一点:

kill -SIGKILL echo $(pidof proc1; pidof proc2)

但是我只是收到“ bash:kill:echo:参数必须是进程或作业ID”的错误消息。 我是bash脚本的新手,所以我敢肯定,我根本没有想到过。

3 个答案:

答案 0 :(得分:3)

摆脱echo。不必要,这是错误消息的原因,因为单词echo不是PID。

kill -SIGKILL $(pidof hsd-tab; pidof firefox-browser)

更好的pidof可以使用多个程序名称:

kill -SIGKILL $(pidof hsd-tab firefox-browser)

更好的是,使用pkill按名称杀死程序。就像kill + pidof

pkill -SIGKILL hsd-tab firefox-browser

除非绝对必要,否则请尝试避免使用-SIGKILL-9杀死程序。它没有给他们机会彻底关闭计算机。这几乎总是矫kill过正,是一个坏习惯。我会去的:

pkill hsd-tab firefox-browser

答案 1 :(得分:1)

表面上,您需要消除echo

kill -SIGKILL $(pidof hsd-tab; pidof firefox-browser)

这应该给您两个(或更多)以空格分隔的PID。我相信kill抱怨echo既不是PID也不是工作ID(看起来像%1等)。

答案 2 :(得分:0)

您不需要data() { return { theModel: "" } } echo获取已运行命令的标准输出。