如何用 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 -v
和 cut
:
kill -4 $(pgrep smthn)
pkill
只是将信号发送到您指定的任何进程可执行文件:
pkill -4 smthn
我试过像
这样的管道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 -v
和 cut
:
kill -4 $(pgrep smthn)
pkill
只是将信号发送到您指定的任何进程可执行文件:
pkill -4 smthn