我正在使用 CentOS 7。我正在尝试编写一个脚本来启动和停止 puma 进程,但我不知道如何获取“主”PID(如果它是正确的术语的话)。在下面的命令中
[rails@server myproject_production]$ ps aux | grep puma
rails 15767 0.0 1.2 437904 13612 ? Sl 17:20 0:00 puma 3.11.4 (tcp://0.0.0.0:3000,unix:///home/rails/myproject_production/shared/sockets/puma.sock) [myproject_production]
rails 15779 0.6 7.6 1061248 80688 ? Sl 17:20 0:05 puma: cluster worker 1: 15767 [myproject_production]
rails 15781 0.6 7.7 1061248 80876 ? Sl 17:20 0:05 puma: cluster worker 2: 15767 [myproject_production]
rails 15785 0.6 7.4 1061964 78488 ? Sl 17:20 0:05 puma: cluster worker 3: 15767 [myproject_production]
rails 15880 0.7 7.4 1059612 78592 ? Sl 17:22 0:05 puma: cluster worker 0: 15767 [myproject_production]
rails 17106 0.0 0.1 112612 1064 pts/0 S+ 17:33 0:00 grep --color=auto puma
主控PID为“15767”。如果我杀掉所有其他 puma 进程都会死掉。如何编写命令来获取脚本变量?
答案1
使用pgrep
而不是过滤来自 的输出ps
。我认为在你的情况下,pgrep -f '^([^ ]*/)?puma '
会匹配正确的过程,但进行一些实验以确保你得到你想要的而不是更多。
pgrep
一旦您对找到要终止的进程感到满意,请替换pgrep
为pkill
。
答案2
您可以使用 ps 来做到这一点,如下所示:
ps -ef | grep puma | grep -v grep | grep -v cluster | awk '{print $2}' | xargs kill
说明:
附注:给出进程信息
grep:对提供的字符串进行过滤
grep -v:删除匹配记录
awk '{打印$2}':返回该行的第二项
参数:将提供的输入转换为后面的命令的参数