2

I'm using CentOS 7. I'm trying to write a script to start and stop a puma process but I can't figure out how to get the "master" PID, if taht is even the right term. In the below command

[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

The master PID is "15767". If I kill that all the other puma processes will die. How do I write a command to get taht into a script variable?

  • I naively assume you can grep for more text from that line of ps, why can't you? – ajeh May 9 '18 at 21:53
4

Use pgrep instead of filtering the output from ps. I think in your case, pgrep -f '^([^ ]*/)?puma ' will match the right process, but experiment a bit to make sure that you're getting what you want and no more.

Once you're satisfied that pgrep is finding the process you want to kill, replace pgrep by pkill.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.