nginx 관련 문제를 해결하려고 하는데 내 컴퓨터에서 nginx 프로세스가 실행되고 있다고 생각했습니다. 이 명령을 실행하면 다음과 같은 출력이 표시됩니다.
$ ps aux -P | grep nginx
1000 3947 0.0 0.0 13596 932 pts/0 S+ 14:05 0:00 grep --color=auto nginx
하지만 프로세스 1000, 3947, 13596 또는 932를 종료하려고 하면 다음과 같은 오류가 발생합니다.
bash: kill: (1000) - No such process
무슨 일이에요? nginx 프로세스를 찾고 종료하는 방법은 무엇입니까?
답변1
저는 보통 . pgrep
보다 더 편리하다고 생각합니다 ps | grep
. killall
최종 목표가 이름으로 여러 프로세스를 삭제하는 것인지 확인하고 싶을 수도 있습니다 .
답변2
ps aux -P
다음 열을 표시합니다.
$ ps aux -P | head -1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
두 번째 열만 pid입니다.
경고: 임의의 pid를 죽이려고 하지 마십시오.
pid 3947은 프롬프트가 표시되었을 때 종료된 grep 프로세스이므로 실제로 그러한 프로세스는 없습니다.
nginx 프로세스가 있는 경우 grep 출력에 표시됩니다. 결론: nginx가 귀하의 컴퓨터에서 실행되고 있지 않습니다.
답변3
grep
명령 자체가 ps
출력 에 나타나지 않도록 하는 일반적인 방법은 첫 번째 문자를 문자 클래스에 넣어 리터럴 자체와 일치하지 않도록 하는 것입니다. 즉,
$ ps aux | grep [n]ginx
이렇게 하면 grep
패턴이 "nginx"와 일치하지만 출력에 표시된 리터럴 "[n]ginx"와는 일치하지 않습니다 ps
.
답변4
sudo
프로세스를 관리하기 위해 이를 사용해야 하는 경우가 많습니다 nginx
. sudo
"작업이 허용되지 않음" 오류가 발생하는 경우 아래의 모든 명령 앞에 접두어를 입력하세요. 이 질문에는 "ps"라는 태그가 붙어 있지만 다른 기회에 대해서도 언급하고 싶습니다.
nginx를 중지하려면 다음을 사용하는 것이 좋습니다.
service nginx stop
그러나 귀하의 목적이 "pid" 자체를 찾는 것이라면(예: 신호 보내기) nginx.pid
nginx가 시작되면 해당 pid를 이 파일에 저장합니다.
nginx
신호를 사용하여 제어할 수 있습니다. 마스터 프로세스의 프로세스 ID는 기본적으로 /usr/local/nginx/logs/nginx.pid 파일에 기록됩니다.
하지만 다른 곳에 있을 수도 있습니다.
당신이 가지고 있다면nginx를 직접 컴파일pid-path
지정할 수도 있습니다.
--pid-path=path
nginx.pid
- 마스터 프로세스의 프로세스 ID가 저장될 파일 이름을 설정합니다. 설치 후에는 언제든지 pid 지시어를 사용하여 nginx.conf 구성 파일에서 파일 이름을 변경할 수 있습니다. 기본적으로 파일 이름은 prefix/logs/nginx.pid입니다.
그렇지 않은 경우에는 pid 파일 경로를 명시적으로 지정할 수 있습니다 nginx.conf
.
읽다Nginx 제어
따라서 신호를 보내려면 다음을 입력하십시오.
kill `cat /path/to/nginx.pid`
또는
kill $(cat /path/to/nginx.pid)
개인적으로 스크립트나 배포 지침을 작성할 때 nginx pid에 대한 중지나 검색을 위임하지 않습니다. pgrep
특히 Windows에서는 grep
로컬 컴퓨터에서 작동하더라도 마찬가지입니다. 하지만 이 경우 중지를 pkill
(프로세스 종료됨) 으로 줄입니다 .
pkill nginx