如何用 linux 做 ps 管道?

How to do ps pipelines with linux?

我试过像

这样的管道
ps -A | grep "smthn" | kill -4 (smthn's PID)

那么如何从 grep 输出中获取多个进程的 PID? 喜欢ps -A | grep "smthn", "smthn1", "smthn2" | kill -4 (smthn's PID)

我不认为 kill 是从 stdin 读取的,它只需要 pid 作为参数。因此,请改用 kill $(...),其中查找 pids 的代码会替换 $(...) 部分中的点。

查找 pids:

ps -A | grep smthn | grep -v grep | cut -d " " -f 1

这里第一个grep找smthn,第二个grep过滤掉找smthn的grep命令,此时还是运行。然后 cut 只选择输出的第一个字段,即 pid。

合计:

kill -4 $(ps -A | grep smthn | grep -v grep | cut -d " " -f 1)

如果你有 pgrep and pkill 并且进程总是命名相同(总是 smthn,而不是 smthn1、smthn2 等等),你可以大大简化它。 pgrep 只是 returns pid,所以你不需要使用 grep -vcut:

kill -4 $(pgrep smthn)

pkill 只是将信号发送到您指定的任何进程可执行文件:

pkill -4 smthn