Shell-Script
我如何獲得我的主程序(而不是它的工作人員之一)的 PI D?
我正在使用 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:將提供的輸入轉換為參數緊隨其後的命令