为什么将 pgrep 输出导入 kill 不起作用

为什么将 pgrep 输出导入 kill 不起作用

我正在研究管道,以了解如何使用它们。我正在尝试使用此命令按名称终止进程:pgrep <some_process> | kill

但是我得到的输出是 kill 的使用说明,就像它没有收到任何输入一样。

当然,我知道有更简单的方法来完成相同的任务,例如pkillkillall,但我想知道为什么这不起作用。

谢谢

答案1

kill没有从 stdin 读取任何内容,但需要一些命令行参数,如果没有得到这些参数,则会引发错误。

仅当管道右侧的程序确实从管道读取数据时,管道才有效。并非所有程序都如此。

答案2

正如 Florian 所解释的,kill需要命令行输入。

为了解决这个问题,你可以使用

  • xargs为命令构建命令行参数,例如,pgrep vivaldi | xargs kill或者更好的是pgrep vivaldi | awk 'BEGIN{ORS=" "} 1' | xargs kill
  • shell 的替换: kill $(pgrep vivaldi)
  • killall它的功能与 pgrep 和 kill 组合几乎相同,例如,killall vivaldi
  • pkill,另一个根据名称终止的实用程序,例如,pkill vivaldi

答案3

要通过名称终止程序,如果您确实知道进程的名称,则只需使用命令skill <your process name>

现在对于管道,理解它们的一个好方法是使用诸如、、、、echo等工具。有许多程序实际上可以从管道读取......我一直使用的一个是。morelesstailheadgrep

相关内容