【发布时间】:2013-01-23 20:22:38
【问题描述】:
我有一个充满 .pid 文件的文件夹。每个都有一个 resque worker 的 PID。如何从命令行杀死该文件夹中的每个 PID?
【问题讨论】:
标签: bash unix command-line resque pid
我有一个充满 .pid 文件的文件夹。每个都有一个 resque worker 的 PID。如何从命令行杀死该文件夹中的每个 PID?
【问题讨论】:
标签: bash unix command-line resque pid
前导填充会导致错误。使用sed 's/^ *//g' 删除前导间距/填充:
ps -e -o pid,command | grep '[r]esque-[0-9]' | sed 's/^ *//g' | cut -d ' ' -f 1 | xargs -L1 kill -s QUIT
【讨论】:
虽然问题是答案,但认为有很多很棒的方法可以
在 linux 中做一些任务,以展示 linux 的强大功能
这是怎么回事
pgrep ruby | xargs ps | grep [r]esque | awk '{print $1}' | xargs kill -9
注意:pgrep 在 MAC-OS 中不受支持,只是认为对某些人有用
【讨论】:
cat folder/*.pid | xargs kill
应该这样做吗?
如果需要指定信号,例如KILL,那么
cat folder/*.pid | xargs kill -KILL
如果您的 pidfiles 缺少换行符,这可能会更好:
( cd folder &&
for pidfile in *.pid; do echo kill -QUIT `cat $pidfile`; done
)
运行命令:
kill `cat folder/*.pid`
如果 PID 文件没有换行符,那么以下应该可以工作:
for f in folder/*.pid; do kill `cat "$f"`; done
【讨论】:
运行这个 - 使用反引号:
kill -9 `cat /path/*.pid`
【讨论】:
for i in `ls`; do kill $i; done.
; do kill $i; done 中运行 for i 时,我会收到完成命令的提示(a ">")。删除 -9 没有帮助
ls 来进行for 循环是a bad idea。 @hrunting 的循环使用更安全的语法。