PHP에서 킬 기능은 일반적으로 지정된 프로세스로 신호를 보내는 데 사용됩니다. 그 자체로는 매우 직접적이지만 개발 중에는 디버그 모드에서 신호 및 관련 오류 메시지를 전송하는 프로세스를보아야하며, 이는 잠재적 문제를 찾아서 수정하는 데 도움이됩니다. 디버깅 모드를 결합하여보다 자세한 디버깅 정보를 출력하면 문제 해결 문제의 효율성을 크게 향상시킬 수 있습니다.
이 기사는 PHP 킬 기능의보다 자세한 디버깅 정보를 디버깅 모드와 결합하여 개발자가 프로세스 신호를 처리 할 때 실행 프로세스를보다 정확하게 제어 할 수 있도록 도입하는 방법을 소개합니다.
PHP 킬 기능은 프로세스로 신호를 보내는 데 사용됩니다. 기본 구문은 다음과 같습니다.
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">kill</span></span><span> ( </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$pid</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$signal</span></span><span> )
</span></span>
$ PID 는 대상 프로세스의 ID입니다.
$ 신호 는 SIGTERT (종료 신호) 또는 SIGKILL (강제 종료 신호)과 같은 신호 번호입니다.
일반적으로 킬 기능은 프로세스 제어, 작업 일정 및 기타 시나리오에 사용됩니다. 통과 된 $ PID가 존재하지 않거나 허가없이 신호가 전송되면 False가 반환됩니다.
실제 개발에서 특히 다중 프로세스 작업과 관련하여 다음과 같은 문제가 발생할 수 있습니다.
프로세스 ID가 유효하지 않거나 프로세스가 존재하지 않습니다.
신호를 보낼 때 불충분 한 권한;
신호는 올바르게 처리되지 않거나 통과되지 않습니다.
이러한 문제는 종종 오류 정보가 충분하지 않은 경우 진단하기가 어렵습니다. 따라서 디버그 모드를 활성화하면 오류가 발생할 때 더 많은 컨텍스트 정보를 얻을 수있어 문제를 신속하게 찾을 수 있습니다.
PHP는 디버깅 레벨을 설정할 수있는 error_reporting 함수를 제공합니다. 브라우저 또는 로그 파일에 디버그 정보를 출력하면 킬 기능을 호출 할 때 자세한 오류 정보를 볼 수 있습니다.
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'display_errors'</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">error_reporting</span></span><span>(E_ALL);
</span></span>
이 코드는 모든 PHP 오류 및 경고를 표시하므로 개발 환경에서 사용하기에 적합합니다.
킬 함수의 반환 값은 신호가 성공적으로 전송되었는지 여부를 알려줍니다. 실패하면 Error_get_last () 또는 posix_get_last_error () 함수를 사용하여보다 자세한 오류 정보를 얻을 수 있습니다.
<span><span><span class="hljs-variable">$pid</span></span><span> = </span><span><span class="hljs-number">1234</span></span><span>; </span><span><span class="hljs-comment">// 이것이 목표 과정이라고 가정하십시오 PID</span></span><span>
</span><span><span class="hljs-variable">$signal</span></span><span> = SIGTERM;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">kill</span></span><span>(</span><span><span class="hljs-variable">$pid</span></span><span>, </span><span><span class="hljs-variable">$signal</span></span><span>)) {
</span><span><span class="hljs-variable">$error</span></span><span> = </span><span><span class="hljs-title function_ invoke__">posix_get_last_error</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Failed to send signal to process <span class="hljs-subst">$pid</span></span></span><span>. Error: </span><span><span class="hljs-subst">$error</span></span><span>\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Signal <span class="hljs-subst">$signal</span></span></span><span> successfully sent to process </span><span><span class="hljs-subst">$pid</span></span><span>\n";
}
</span></span>
이 방법은 어떤 프로세스의 신호 전송이 실패했는지 명확하게 알 수 있으며 오류의 특정 원인을 알 수 있습니다.
브라우저에 출력하는 것 외에도 로그 파일에 디버그 정보를 작성하여 프로그램이 백그라운드에서 실행중인 경우에도 디버그 정보를 볼 수 있습니다.
<span><span><span class="hljs-variable">$logFile</span></span><span> = </span><span><span class="hljs-string">'/path/to/debug.log'</span></span><span>;
</span><span><span class="hljs-variable">$pid</span></span><span> = </span><span><span class="hljs-number">1234</span></span><span>;
</span><span><span class="hljs-variable">$signal</span></span><span> = SIGTERM;
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 출력 버퍼링을 시작하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">kill</span></span><span>(</span><span><span class="hljs-variable">$pid</span></span><span>, </span><span><span class="hljs-variable">$signal</span></span><span>)) {
</span><span><span class="hljs-variable">$error</span></span><span> = </span><span><span class="hljs-title function_ invoke__">posix_get_last_error</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Failed to send signal to process <span class="hljs-subst">$pid</span></span></span><span>. Error: </span><span><span class="hljs-subst">$error</span></span><span>\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Signal <span class="hljs-subst">$signal</span></span></span><span> successfully sent to process </span><span><span class="hljs-subst">$pid</span></span><span>\n";
}
</span><span><span class="hljs-variable">$debugInfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_clean</span></span><span>(); </span><span><span class="hljs-comment">// 버퍼 컨텐츠를 얻고 명확하게하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$logFile</span></span><span>, </span><span><span class="hljs-variable">$debugInfo</span></span><span>, FILE_APPEND); </span><span><span class="hljs-comment">// 로그 파일에 쓰십시오</span></span><span>
</span></span>
이 메소드는 디버깅 정보를 파일에 지속적으로 저장하여 나중에 더 쉽게보고 분석 할 수 있습니다.
코드 재사용 성을 향상시키기 위해 디버그 정보의 출력을 기능으로 캡슐화하여 다른 장소에서 호출 할 수 있습니다.
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">debugKill</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$pid</span></span></span><span>, </span><span><span class="hljs-variable">$signal</span></span><span>) {
</span><span><span class="hljs-variable">$logFile</span></span><span> = </span><span><span class="hljs-string">'/path/to/debug.log'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">kill</span></span><span>(</span><span><span class="hljs-variable">$pid</span></span><span>, </span><span><span class="hljs-variable">$signal</span></span><span>)) {
</span><span><span class="hljs-variable">$error</span></span><span> = </span><span><span class="hljs-title function_ invoke__">posix_get_last_error</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Failed to send signal to process <span class="hljs-subst">$pid</span></span></span><span>. Error: </span><span><span class="hljs-subst">$error</span></span><span>\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Signal <span class="hljs-subst">$signal</span></span></span><span> successfully sent to process </span><span><span class="hljs-subst">$pid</span></span><span>\n";
}
</span><span><span class="hljs-variable">$debugInfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_clean</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$logFile</span></span><span>, </span><span><span class="hljs-variable">$debugInfo</span></span><span>, FILE_APPEND);
}
</span><span><span class="hljs-comment">// 전화 예제</span></span><span>
</span><span><span class="hljs-title function_ invoke__">debugKill</span></span><span>(</span><span><span class="hljs-number">1234</span></span><span>, SIGTERM);
</span></span>
이러한 방식으로 디버그 코드를 반복적으로 작성하지 않고도 코드에 디버그 정보를 삽입 할 수 있습니다.
권한 문제 확인 : 권한 문제가 일반적인 오류 소스 인 서버 환경에서 PHP 스크립트가 대상 프로세스에 신호를 보낼 수있는 충분한 권한이 있는지 확인하십시오.
대상 프로세스가 존재하는지 확인하십시오 . 대상 프로세스가 종료되면 킬 함수는 False를 반환합니다. 이 시점에서 유효하지 않은 신호를 보내지 않도록 프로세스 상태를 확인할 수 있습니다.
합리적인 로그 사용 : 많은 양의 디버깅 정보로 인해 로그 파일이 빠르게 증가 할 수 있습니다. 전체 디스크 공간을 피하기 위해 로그를 정기적으로 청소하거나 로그 회전 정책을 설정하십시오.
개발 및 생산 환경 구별 : 생산 환경에서는 오류 정보 표시를 끄고 보안 및 성능을 보장하기 위해 중요한 로그 정보 만 파일에 작성하는 것이 좋습니다.