杀死文件夹中的所有pid文件

时间:2013-02-08 05:31:04

标签: bash unix command-line resque pid

我有一个充满.pid文件的文件夹。每个都有一个resque工人的PID。如何从命令行中删除该文件夹中的每个PID?

6 个答案:

答案 0 :(得分:4)

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
)

答案 1 :(得分:3)

根据它使用的docs

ps -e -o pid,command | grep [r]esque-[0-9] | cut -d ' ' -f 1 | xargs -L1 kill -s QUIT

注意:按名称查找 ,而不是使用.pid文件。

此外,QUIT信号将优雅地杀死它们。如果你想强行杀死他们,请改用TERM

答案 2 :(得分:2)

运行命令:

kill `cat folder/*.pid`

如果PID文件没有换行符,则以下内容应该有效:

for f in folder/*.pid; do kill `cat "$f"`; done

答案 3 :(得分:2)

运行此功能 - 使用反引号:

kill -9 `cat /path/*.pid`

答案 4 :(得分:0)

虽然问题是答案,但认为有一些很棒的方法可以

在linux中做一些任务,以展示linux的强大功能

这是怎么回事?

pgrep ruby | xargs ps | grep [r]esque | awk '{print $1}' | xargs kill -9 

注意:MAC-OS不支持pgrep,只是认为对某些人有用

答案 5 :(得分:0)

前导填充会导致错误。使用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