为什么管道运算符的这种用法不起作用?

为什么管道运算符的这种用法不起作用?

我通常用来pidof获取进程的 pid,并KILL -SIGTERM <pid>终止它。

管道应该将一个命令的输出作为另一个命令的输入。

那么为什么下面的命令不起作用呢?

pidof firefox | kill -SIGTERM

答案1

管道应该将一个命令的输出作为另一个命令的输入。

这是正确的,但kill不接受标准输入的任何输入。相反,您需要将其作为命令行参数提供:

kill -SIGTERM "$(pidof firefox)"

或者:

pidof firefox | xargs kill

$(是 shell 内部的命令扩展,而xargs是外部的。

然而,这些方法有许多极端情况,例如如果有多个 pid、没有 pid 时该怎么办等等——这就是 pkill 存在的原因:

pkill -TERM firefox

答案2

更好地运行:

 kill $(pidof firefox)

或者

pkill firefox

答案3

只是为了多样性:跑步怎么样:

kill -SIGTERM "$(pgrep -f firefox)"

不确定不区分大小写:

kill -SIGTERM "$(pgrep -fi FirEfox)"

多个进程以相同的名称运行,并且想要杀死第一个进程:

kill -SIGTERM "$(pgrep -f firefox | head -1)"

关于我的信息pgrep

$ pgrep -V
pgrep (proctools 0.4pre1) http://proctools.sourceforge.net

相关内容