중지 실패

현상:

실행 php start.php stopstop fail 메시지가 나타납니다.

첫 번째 가능성

전제조건은 debug 모드로 시작된 workerman이며, 개발자가 터미널에서 ctrl z를 눌러 workerman에 SIGSTOP 신호를 보내서 workerman이 백그라운드에서 중단(정지) 상태가 되어 stop 명령(SIGINT 신호)에 응답할 수 없게 됩니다.

해결:
workerman을 시작한 터미널에서 fg를 입력(SIGCONT 신호 전송)한 후 Enter를 눌러 workerman을 포그라운드에서 다시 실행하고, ctrl c를 눌러(SIGINT 신호 전송) workerman을 중지합니다.

중지할 수 없는 경우, 다음 두 개의 명령을 실행해 보십시오.

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

두 번째 가능성

stop을 실행하는 사용자와 workerman을 시작하는 사용자가 일치하지 않아, stop 사용자가 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 확장을 설치했지만 grpc 확장에 해당하는 환경 변수를 설정하지 않은 경우, 시작 시 추가적으로 마운트 프로세스가 fork되며, 이로 인해 중지 시 실패할 수 있습니다.