실패한 중지

현상:

php start.php stop을 실행하면 stop fail이라고 표시됩니다.

첫 번째 가능성

Workerman을 debug 모드로 시작했고, 개발자가 터미널에서 ctrl z를 눌러 SIGSTOP 신호를 보낸 경우, Workerman이 백그라운드로 들어가고 일시 중지되어 있기 때문에 중지 명령(SIGINT 신호)에 응답할 수 없습니다.

해결책:
Workerman을 시작한 터미널에서 fg(SIGCONT 신호를 보냄)를 입력하고 Enter를 눌러서 Workerman을 다시 전면으로 가져와서 ctrl c(SIGINT 신호를 보냄)를 눌러 Workerman을 중지합니다.

만약 이렇게 중지되지 않으면 다음 두 명령어를 시도해보십시오.

killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9

두 번째 가능성

중지를 시도하는 사용자와 Workerman을 시작한 사용자가 다르므로, 중지 사용자에게 Workerman을 중지하는 권한이 없습니다.

해결책:
Workerman을 시작한 사용자로 전환하거나 더 높은 권한을 가진 사용자로 Workerman을 중지합니다.

세 번째 가능성

Workerman의 주 프로세스 pid 파일이 삭제되어 스크립트가 pid 프로세스를 찾을 수 없어 중지에 실패합니다.

해결:
pid 파일을 안전한 위치에 저장하고, 매뉴얼 Worker::$pidFile을 참조하십시오.

네 번째 가능성

Workerman의 주 프로세스 pid 파일에 해당하는 프로세스가 Workerman 프로세스가 아닙니다.

해결:
Workerman의 주 프로세스의 pid 파일을 열어 주 프로세스의 pid를 확인하고, pid 파일은 기본적으로 Workerman과 동일한 디렉터리에 저장됩니다. 명령어 ps aux | grep 주 프로세스 pid를 실행하여 해당 프로세스가 Workerman 프로세스인지 확인하세요. 그렇지 않은 경우, 서버가 다시 부팅되어 Workerman이 저장한 pid가 만료된 pid일 수 있고, 이 pid가 다른 프로세스에 의해 사용되어 중지에 실패하는 경우가 있습니다. 이 경우에는 pid 파일을 삭제하시면 됩니다.

다섯 번째 가능성

grpc 확장 기능을 설치했지만 해당 확장 기능에 대한 환경 변수를 설정하지 않은 경우에는 시작시 부모 fork 프로세스가 추가로 생성되어 중지가 실패할 수 있습니다.