>  기사  >  백엔드 개발  >  신호 처리 메커니즘의 작동을 학습하는 PHP

신호 처리 메커니즘의 작동을 학습하는 PHP

little bottle
little bottle앞으로
2019-04-18 17:35:002267검색

이 글은 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제