>백엔드 개발 >PHP 문제 >php pcntl_signal이 효과가 없으면 어떻게 해야 합니까?

php pcntl_signal이 효과가 없으면 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2021-10-15 09:48:192510검색

php pcntl_signal은 기본적으로 pcntl이 중단된 시스템 호출을 자동으로 다시 시작하므로 효과가 없습니다. 해결 방법은 시스템 호출을 다시 시작하지 않도록 설정하는 것입니다.

php pcntl_signal이 효과가 없으면 어떻게 해야 합니까?

이 글의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

php pcntl_signal이 작동하지 않으면 어떻게 해야 하나요?

php pcntl_signal 사용 및 주의 사항

최근에 저는 PHP 기반 다중 프로세스 서버를 만들어야 합니다. 정상적으로 다시 시작하려면 kill이 보낸 SIGTERM 신호를 캡처해야 하므로 pcntl_signal이 사용됩니다.

처음에는 캡처된 신호가 유효하지 않아 신호 처리 기능에 들어갈 수 없다는 것을 알았습니다. 나는 문서를 연구한 결과 선언(ticks = 1); 을 실행해야 한다는 것을 발견했습니다. 설명에 따르면 이는 수정 발진기와 유사합니다. 추가 후 상위 프로세스는 신호를 수신할 수 있습니다.

하지만 자식 프로세스는 여전히 신호를 받을 수 없었습니다. 오랜 시간 동안 확인한 후에도 예외는 발견되지 않았습니다. 일반적으로 자식 프로세스는 여기서 시스템 호출을 중단할 수 없다고 의심했습니다. while 1 루프로 변경했더니 인터럽트 핸들러 기능이 원활하게 들어갈 수 있었습니다.

그러다가 검색해 보니 pcntl은 기본적으로 중단된 시스템 호출을 자동으로 다시 시작하는데, 외부 성능으로는 시스템 호출을 중단할 수 없다는 것이었습니다.

이번에 매뉴얼을 살펴보면 pcntl_signal에 세 번째 매개변수가 있는 것으로 나타났는데, 이 매개변수 역시 시스템 호출을 자동으로 다시 시작할지 여부를 결정할 수 있습니다. SPCNTL_SIGNAL 함수 프로필

(PHP 4 & GT; = 4.1.0, PHP 5, PHP 8)

pcntl_signal — 신호 프로세서 설치

Rreee

함수 pcntl_signal()은 새 신호 처리기를 설치합니다. signo가 지정한 신호에 대해.

Parameters

signo

신호 번호.

handler

신호 처리기는 사용자가 만든 함수나 메서드의 이름일 수도 있고 시스템 상수 SIG_IGN(주석: 신호 처리기 무시) 또는 SIG_DFL(기본 신호 처리기)일 수도 있습니다.

참고:

객체에 메소드를 사용하면 객체의 참조 횟수가 증가하여 다른 처리로 변경하거나 스크립트가 종료될 때까지 유지됩니다.

restart_syscalls

신호가 도착할 때 시스템 호출 재시작이 가능한지 여부를 지정합니다. (번역 참고사항: 해당 정보를 확인한 후, 이 매개변수는 시스템 호출이 시그널에 의해 중단된 경우 시스템 호출을 처음부터 다시 시작하는지 여부를 의미합니다. 그러나 http://bugs.php.net/bug.php?id에 따르면 =52121, 이 매개변수에는 버그가 있어 유효하지 않습니다.)

위 내용은 php pcntl_signal이 효과가 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.