Linux 如何获取进程号?

michael_roshen · 2013年11月11日 · 最后由 Victor 回复于 2013年11月22日 · 5128 次阅读

问个 linux 的小问题: 不知道 pidof 是根据什么来查找进程号的,pidof g_queue 获取不到 通过下面的命令,可以根据 command 来过滤出为想要的进程 ps -eo pid,command|grep g_queue 可以找到所有 g_queue 的进程号 然后怎么实现 kill -9 pidof xx的效果呢?在这个命令上如何获取 id 的数组?

# ps -eo pid,command|grep g_queue
28897 /usr/local/bin/ruby /usr/local/bin/rake g_queue:worker workers=UploadQueue RAILS_ENV=production
28902 /usr/local/bin/ruby /usr/local/bin/rake g_queue:worker workers=UploadQueue RAILS_ENV=production
28905 /usr/local/bin/ruby /usr/local/bin/rake g_queue:worker workers=UploadQueue RAILS_ENV=production
28909 /usr/local/bin/ruby /usr/local/bin/rake g_queue:worker workers=UploadQueue RAILS_ENV=production
28913 /usr/local/bin/ruby /usr/local/bin/rake g_queue:worker workers=UploadQueue RAILS_ENV=production
28917 /usr/local/bin/ruby /usr/local/bin/rake g_queue:worker workers=UploadQueue RAILS_ENV=production
28920 /usr/local/bin/ruby /usr/local/bin/rake g_queue:worker workers=UploadQueue RAILS_ENV=production
29461 grep g_queue

解决方法:

#!/bin/bash
ps -eo pid,rsz,command|grep g_queue|grep -v grep
while read a1 a2 a3
do
   kill -9 $a1
done

下面这样写,怎么也启动不起来

#!/bin/bash
for i in {1..4}
do
  rake g_queue:worker workers=XxQueue RAILS_ENV=production &
done

whereis rake /usr/local/bin/rake 下面这样写,怎么也启动不起来

#!/bin/bash
for i in {1..4}
do
 #这里指定rake的安装路径,即可以解决
  /usr/local/bin/rake g_queue:worker workers=XxQueue RAILS_ENV=production &
done

使用定时任务 crontab -e 编辑如下内容:

*/10 * * * * /bin/bash /usr/localstart.sh #每10分钟运行一次
*/20 * * * * /bin/bash /usr/local/kill.sh #每20分钟运行一次

xargs 命令可以吗?

以前删除系统所有的 gem,用 gem list | cut -d" " -f1 | xargs gem uninstall –aIx ...

通用的方法是用 find 或者 find 搭配 xargs。也可以用专门的 pkillpgrep

3 楼 已删除

#2 楼 @doitian @zhangyuan 删除搞定了,重启搞不定了。。。

#!/bin/bash
ps -eo pid,rsz,command|grep g_queue|grep -v grep
while read a1 a2 a3
do
   kill -9 $a1
done
#!/bin/bash
for i in {1..4}
do
  rake g_queue:worker workers=XxQueue RAILS_ENV=production &
done

#4 楼 @michael_roshen

ps aux | grep puma
kill -s SIGUSR2 9594 #restart daemon puma server
kill -s SIGTERM 9594 #stop daemon puma server
#or
pkill –f puma

我在服务器上重启 puma 是这么搞的

标准做法是进程自己生成一个 pid 文件,里面的内容是进程号 #缺乏可运维性的系统#

#6 楼 @fsword 恩。试过

bundle exec puma -e production -b unix:///var/run/site.sock --pidfile /var/run/puma.pid -d
kill -s SIGUSR2 `cat /var/run/puma.pid` #restart daemon puma server
kill -s SIGTERM `cat /var/run/puma.pid` #stop daemon puma server

bundle exec puma -e production -d -b unix:///var/run/site.sock --pidfile /var/run/puma.pid
bundle exec pumactl -P /var/run/puma.pid restart #restart daemon puma server
bundle exec pumactl -P /var/run/puma.pid stop #stop daemon puma server
需要 登录 后方可回复, 如果你还没有账号请 注册新账号