我正在研究管道,以了解如何使用它们。我正在尝试使用此命令按名称终止进程:pgrep <some_process> | kill
但是我得到的输出是 kill 的使用说明,就像它没有收到任何输入一样。
当然,我知道有更简单的方法来完成相同的任务,例如pkill
或killall
,但我想知道为什么这不起作用。
谢谢
答案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
等工具。有许多程序实际上可以从管道读取......我一直使用的一个是。more
less
tail
head
grep