如何获取主进程(而不是其工作进程之一)的 PI​​D?

如何获取主进程(而不是其工作进程之一)的 PI​​D?

我正在使用 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一旦您对找到要终止的进程感到满意,请替换pgreppkill

答案2

您可以使用 ps 来做到这一点,如下所示:

ps -ef | grep puma | grep -v grep | grep -v cluster | awk '{print $2}' | xargs kill

说明:
附注:给出进程信息
grep:对提供的字符串进行过滤
grep -v:删除匹配记录
awk '{打印$2}':返回该行的第二项
参数:将提供的输入转换为后面的命令的参数

相关内容