2012-03-01 2 views
7

어떻게 명령 줄에서 CTRL + C을 PHP로 처리 할 수 ​​있습니까? Windows에서 Pcntl_* 기능이 작동하지 않습니다.Windows의 PHP CLI : Ctrl-C 명령을 처리 하시겠습니까?

+0

달성하려는 목표는 무엇입니까? –

+0

테스트 할 Windows가 없습니다. ['SetConsoleCtrlHandler'] (http : // msdn.)와 함께 ['w32api_register_function'] (http://www.php.net/manual/en/function.w32api-register-function.php) microsoft.com/en-us/library/windows/desktop/ms686016(v=vs.85).aspx), 그러나 그것은 여기에 격렬하게 추측하고 있습니다. – Wrikken

+0

@ 대각리 방해 할 때 뭔가 할 일이 필요합니다. 예를 들어, 종료하기 전에 in-memory xml dom을 파일에 씁니다. – x74x61

답변

0

매우 오랜 시간이 걸리는 명령 줄을 통해 PHP에서 작업을 실행하려는 경우 배지로 구성하고 이미 수행 한 작업을 추적하려고합니다.

이제 전체 목록을 처리 한 후에뿐만 아니라 각 배지를 처리하고 (예 : 처리 한 다음 XML 파일에 저장) 모든 배지를 처리 ​​할 수 ​​있습니다. 중간에 충돌/중지하면 하나의 배지 만 취소되며 모든 배지는 취소되지 않습니다.

각 배지 뒤에서 현재 위치를 저장하면 스크립트가 충돌하거나 중지되었을 때 쉽게 다시 시작할 수 있습니다.

이제 스크립트가 실행 중인지 확인하기 위해 OS 프로세스 목록을 확인한 경우 충돌이 발생하여 이미 실행 중이 아닌 경우 X 분마다 스크립트를 시작하는 cron 작업을 작성할 수 있습니다. 그래서

, TL; DR

작은 배지에서
  • 처리 작업을 마지막으로 성공적으로 처리 된 배지 이미 모두가 행복 할 때까지
  • 는 지속적으로 스크립트를 시작 시작
  • 에서 프로세스를 실행하기위한
  • 확인의
  • 저장 위치 !

그렇지만 작은 명령 행 작업에는 PHP가 좋지만 큰 작업이 있으면 다른 것이 더 적합 할 수 있습니다. 오랫동안 안정적으로 작동 할 수 있는지 확인하고 진행 상황을 보여줄 수있는 방법이 있는지 확인하십시오. 아마 최소의 GUI를 가진 작은 C# 응용 프로그램.

+0

그게 당신이 찾고있는 CtRL + C 해결책이 아니지만 그것은 작동 해결책입니다. PHP가 프로세스 중단을 처리 할 수 ​​있는지 의심 스럽습니다! 당신은 "register_shutdown_function"을 가지고 행운을 시험해 볼 수도 있습니다. – ToBe

+0

글쎄, pcntl_signal이 있긴하지만 그건 유닉스 시스템에만 해당되는 것입니다. –

관련 문제