현재 위치: > 최신 기사 목록> Proc_terminate가 프로세스를 종료 할 수 없다면 어떻게해야합니까? 가능한 원인 및 솔루션 분석

Proc_terminate가 프로세스를 종료 할 수 없다면 어떻게해야합니까? 가능한 원인 및 솔루션 분석

gitbox 2025-06-26

3. 완전한 솔루션 예제

 <span><span><span class="hljs-variable">$cmd</span></span><span> = </span><span><span class="hljs-string">'exec sleep 100'</span></span><span>;
</span><span><span class="hljs-variable">$descriptorspec</span></span><span> = [
    </span><span><span class="hljs-number">0</span></span><span> =&gt; [</span><span><span class="hljs-string">"pipe"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>],
    </span><span><span class="hljs-number">1</span></span><span> =&gt; [</span><span><span class="hljs-string">"pipe"</span></span><span>, </span><span><span class="hljs-string">"w"</span></span><span>],
    </span><span><span class="hljs-number">2</span></span><span> =&gt; [</span><span><span class="hljs-string">"pipe"</span></span><span>, </span><span><span class="hljs-string">"w"</span></span><span>]
];

</span><span><span class="hljs-variable">$process</span></span><span> = </span><span><span class="hljs-title function_ invoke__">proc_open</span></span><span>(</span><span><span class="hljs-variable">$cmd</span></span><span>, </span><span><span class="hljs-variable">$descriptorspec</span></span><span>, </span><span><span class="hljs-variable">$pipes</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_resource</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// 일부 처리를 시뮬레이션하십시오</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">proc_terminate</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>, </span><span><span class="hljs-number">15</span></span><span>); </span><span><span class="hljs-comment">// 노력하다 SIGTERM</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);

    </span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">proc_get_status</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$status</span></span><span>[</span><span><span class="hljs-string">'running'</span></span><span>]) {
        </span><span><span class="hljs-comment">// 여전히 실행중인 경우,노력하다 SIGKILL</span></span><span>
        </span><span><span class="hljs-title function_ invoke__">proc_terminate</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>, </span><span><span class="hljs-number">9</span></span><span>);
    }

    </span><span><span class="hljs-title function_ invoke__">proc_close</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>); </span><span><span class="hljs-comment">// 리소스 정리</span></span><span>
}
</span></span>

IV. 다른 실현 가능한 대안

  • Popen ()exec ()를 사용하여 프로세스를 관리하기 위해 외부 명령과 협력하십시오.

  • PCNTL_FORK () (CLI 환경)를 사용하여 Linux에서 프로세스 관리 직접 구현하십시오.

  • 복잡한 작업의 경우 Proc_Open () 대신 Supervisord와 같은 프로세스 관리 프레임 워크를 사용하는 것을 고려하십시오.