我正在使用 CentOS 7。我正在尝试编写一个脚本来启动和停止 puma 进程,但如果 taht 是正确的术语,我无法弄清楚如何获得“主”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”。如果我杀死所有其他美洲狮进程将死亡。如何编写命令以将 taht 放入脚本变量?
使用
pgrep
而不是过滤来自 的输出ps
。我认为在您的情况下,pgrep -f '^([^ ]*/)?puma '
将匹配正确的流程,但请进行一些试验以确保您得到您想要的,而不是更多。一旦您对
pgrep
找到要杀死的进程感到满意,请替换pgrep
为pkill
.您可以使用 ps 执行此操作,如下所示:
ps -ef | grep puma | grep -v grep | grep -v cluster | awk '{print $2}' | xargs kill
说明:
ps:给出进程信息
grep:对提供的字符串进行过滤
grep -v:删除具有匹配记录的那个
awk '{print $2}':返回行中的第二项
xargs:将提供的输入转换为参数紧随其后的命令