CentOS 7을 사용하고 있습니다. 퓨마 프로세스를 시작하고 중지하는 스크립트를 작성하려고 하는데 "마스터" 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"입니다. 다른 모든 퓨마 프로세스를 종료하면 해당 프로세스도 종료됩니다. 스크립트 변수를 가져오는 명령을 작성하는 방법은 무엇입니까?
답변1
사용pgrep
. ps
귀하의 경우에는 올바른 프로세스가 일치할 것이라고 생각합니다 pgrep -f '^([^ ]*/)?puma '
. 하지만 원하는 것을 얻을 수 있는지 확인하기 위해 몇 가지 실험을 해보세요.
pgrep
종료하려는 프로세스를 찾았다면 pgrep
로 바꾸십시오 pkill
.
답변2
다음과 같이 ps를 사용하여 이 작업을 수행할 수 있습니다.
ps -ef | grep puma | grep -v grep | grep -v cluster | awk '{print $2}' | xargs kill
설명하다:
메모: 프로세스 정보를 제공합니다.
grep: 제공된 문자열을 필터링합니다.
grep -v: 일치하는 기록 삭제
awk '{인쇄 $2}': 행의 두 번째 항목을 반환합니다.
매개변수: 제공된 입력을 후속 명령의 인수로 변환합니다.