Shell-Script

我如何獲得我的主程序(而不是它的工作人員之一)的 PI D?

  • December 2, 2019

我正在使用 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找到要殺死的程序感到滿意,請替換pgreppkill.

您可以使用 ps 執行此操作,如下所示:

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

說明:

ps:給出程序資訊

grep:對提供的字元串進行過濾

grep -v:刪除具有匹配記錄的那個

awk ‘{print $2}’:返回行中的第二項

xargs:將提供的輸入轉換為參數緊隨其後的命令

引用自:https://unix.stackexchange.com/questions/442872