我有一个充满.pid文件的文件夹。每个都有一个resque工人的PID。如何从命令行中删除该文件夹中的每个PID?
答案 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