이 글은 주로 PHP 언어로 작성된 신호 처리 메커니즘의 예를 설명합니다. 관심 있는 친구들이 와서 배울 수 있습니다.
function sig_handler($sig) { print("handled sig: $sig\n"); } pcntl_signal(SIGIO, "sig_handler"); posix_kill(posix_getpid(),SIGIO); while(true) { posix_kill(posix_getpid(),SIGIO); pcntl_signal_dispatch(); sleep(1); }
PHP에서 제공하는 선언(ticks=1) 및 Tick_handler()의 신호 처리 메커니즘을 사용하는 대신 신호 대기열을 수동으로 순환하는 것이 가장 좋습니다. 틱 메커니즘의 성능 문제로 인해 Tick_handler가 콜백됩니다. 명령문이 실행될 때마다 신호가 있는지 확인하지만 대부분 신호가 없습니다.
posix_signal은 신호의 콜백 처리를 설정합니다.
posix_kill은 신호를 프로세스의 보류 중인 신호 대기열에만 넣습니다. 신호 대기열의 신호는 pcntl_signal_dispatch
posix_getpwnam(" nginx") : 사용자 이름의 uid, gid 및 기타 정보를 가져옵니다.
pcntl_signal(SIGPIPE, SIG_IGN, false): 커널이 보낸 SIGPIPE 신호를 무시합니다. 연결이 닫히면 프로세스는 계속해서 잘못된 소켓이고 시스템이 RST 제어 비트 TCP 패킷을 수신하면 시스템은 프로세스에 SIGPIPE 신호를 보내 연결이 끊어졌으며 더 이상 쓸 수 없음을 프로세스에 알립니다. 이 신호의 기본 처리는 프로세스를 종료하는 것이지만, 프로세스는 이를 포착하고 신호를 무시하여 원하지 않게 종료되는 것을 방지할 수 있습니다.
socket 컨텍스트 옵션:
backlog: 스트림 청취 대기열에서 처리되지 않은 연결 수를 제한하는 데 사용됩니다.
so_reuseport: 재사용 포트(해시되기 때문에 동일한 포트를 청취하는 여러 프로세스에 연결하도록 커널에 의해 예약됨) 연결에 해당하는 프로세스를 표시하여 청취 프로세스 수를 변경할 수 없도록 하기 위해,)
타이머 신호 처리
pcntl_signal(SIGALRM,"sig_handler"); pcntl_alarm(2); function sig_handler($sig) { echo "one second after"; } while (1) { pcntl_signal_dispatch(); sleep(1); }
관련 튜토리얼: 초보부터 숙련까지의 PHP 프로그래밍
위 내용은 신호 처리 메커니즘의 작동을 학습하는 PHP의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!