하나의 PHP 스크립트에서 proc_open을 사용하여 프로세스를 만들고 있습니다.프로세스를 종료하는 방법
다른 스크립트에서 어떻게 종료합니까? proc_open에 의해 반환 된 리소스를 전달할 수 없습니다.
또한 proc_get_status()를 사용하여 시도했지만 ppid를 반환합니다. 나는 아이들의 pid를 얻지 않는다.
개발 환경 : WAMP
모든 의견을 환영합니다.
하나의 PHP 스크립트에서 proc_open을 사용하여 프로세스를 만들고 있습니다.프로세스를 종료하는 방법
다른 스크립트에서 어떻게 종료합니까? proc_open에 의해 반환 된 리소스를 전달할 수 없습니다.
또한 proc_get_status()를 사용하여 시도했지만 ppid를 반환합니다. 나는 아이들의 pid를 얻지 않는다.
개발 환경 : WAMP
모든 의견을 환영합니다.
모델을 다시 검사하여 실제로 다른 곳에서 프로세스를 종료해야한다는 점을 확인하는 것이 좋습니다. 대부분의 사소한 상황을 제외하고는 코드를 디버그하고 유지 보수하는 것이 점차 어려워 질 것입니다.
캡슐화 된 상태로 유지하려면 종료하려는 프로세스에 신호를 보내고 종료하려는 프로세스에서 정상적으로 종료하십시오. 그렇지 않으면 정상적인 IPC를 사용하여 "안녕, 친구. 제발, 제발."라는 메시지를 보낼 수 있습니다.
편집 : 두 번째 단락의 경우 여전히 스크립트를 실행하여 종료 할 수 있습니다. 괜찮아. 당신이 피하고자하는 것은 kill-9 유형의 것입니다. 대신 프로세스를 정상적으로 종료하십시오.
posix_kill($pid, 15); // SIGTERM = 15
것은 시작 및 중지 버튼이있는 html 페이지가 있습니다. 시작은 "start.php"라는 스크립트로 이동하여 새 프로세스를 만듭니다. 중지 버튼은 프로세스를 중지하거나 종료해야합니다. 어떻게해야합니까? 늘어나는만큼 기능을 별도의 스크립트로 작성해야한다고 생각할 수 있습니까? – Vidya
나는 그렇게 생각하지 않는다. 당신은 scession 있습니다. 쿠키에 액세스 할 수 있습니다. 파일 시스템에 접근하여 파일 등을 쓸 수 있습니다 (실제로 보안 설정에 의존하지 않을 수도 있습니다). 확장 된 프로세스의 PID를 저장하고 나중에 불러 와서 위에서 언급 한 기술을 사용할 수 있습니다. 죄송 합니다만 정확한 구문을 알려 드릴 수 없습니다. 나는 영원히 그 종류의 물건을 직접 찾고 있습니다. –
실제로, 몇 가지 작은 PHP 스크립트를 제외하고는 모두 정적 HTML 일 뿐이며, scession은 아마도 의문의 여지가 없습니다. –
일부 methond를 사용하여 프로세스를 만들 수 있습니다.이 메서드는 일반적으로 새 프로세스의 PID를 반환합니다.
이 기능이 작동합니까? :
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
$return_value = proc_close($process);
당신은 다른 프로세스를 시작하기 위해이 같은 것을 사용하는 것이 가장 좋은 선택 위치 :이 과정을 실행하고 당신에게 실행중인 프로세스의 ID를 줄 것이라고
$pid = shell_exec("nohup $Command > /dev/null 2>&1 & echo $!");
. 이 nobody로 실행되는 경우 - -
exec("ps $pid", $pState);
$running = (count($pState) >= 2);
당신은 PHP가에서 실행하는 사용자가 소유하지 않은 프로세스를 종료하지 못할, 당신은 항상 그러나
exec("kill $pid");
을 사용할 수 있습니다 종료하는 당신은 아무도로 새로운 프로세스를 시작합니다 사용자 nobody에서 실행중인 프로세스 만 죽일 수 있습니다.
아니요 하나의 인스턴스에서 많은 명령을 보내야하므로 proc_open을 사용해야합니다. – Vidya
것 같아요 : 모든 프로세스 정보를 통해 처리하지 않고 방법은 없습니다 – tuergeist
@ tuergeist, 그건 사실입니다. 유닉스가 좋아하는 사람들은 당신이 나중에 닫으라고 말할 수 있도록 그 프로세스를 열 때 파이프를 열 수도 있지만 PHP와 같은 상태 비 저장 시스템에서는 세션을 사용하지 않으면 호출 프로세스에 대한 참조를 잃어 버릴 수 있습니다. 비슷한 것. 결국, 당신은 proc을 닫는 방법을 알 수 있도록 어떤 것을 추적해야합니다. –
업데이트가 좋을 것입니다. –