2010-07-29 3 views
0

장시간 실행되는 커맨드 라인 스크립트를 개발하고 있으며, 한 번 이상 자체를 시작하지 않기를 바랍니다. 따라서 .pid 파일을 작성하고 실행시 이러한 PID를 가진 프로세스가 있는지 확인하십시오. 문제는 Windows에서 PID로 0을 반환하므로 항상 실행중인 PID에 의해 프로세스가 발생합니다 (시스템 Idle에는 PID 0이 있음).PHP CLI에서 getmypid()가 pid로 0을 반환하는 이유는 무엇입니까?

누군가가 그 문제를 해결하는 방법을 알고 있습니까? Windows에서 데몬을 실행할 수 있습니까? 어쩌면 pcntl_fork로 수정 프로그램을 포킹 할 수 있을까요?

P. 저는 Yii를 사용하고 CConsoleCommand 클래스를 기반으로합니다.

답변

0

내가 틀릴 수도 있지만 .pid를 작성하면 Windows에서 파일을 확인할 것이라고 생각하지 않습니다.

파일이 존재하는지 확인한 다음 파일이 존재하는지 다시 확인할 수 있습니다. 그리고 afaik pcntl_fork는 윈도우에서 실행되지 않습니다. (기본적으로 어떤 종류의 * nix 에뮬레이터가 작동 할 수 있습니다)

+0

PID를 직접 확인하고 PID 파일을 작성한 후 다음 실행시 파일이 존재하는지 확인합니다. 그것은 - PID를 읽고 해당 PID가 실행 중인지 확인하기 위해 tasklist.exe를 시작합니다. 나쁜 점은 getmypid가 프로세스 PID가 아니라 0을 반환한다는 것입니다. – Psihius

+0

Windows 및 PHP의 버전은 무엇입니까? 저는 Windows 7과 PHP 5.3.2를 사용하고 있습니다. "print getmypid(); flush(); sleep (35);"를 실행합니다. 다른 cmd 창에서 tasklist.exe를 실행하면 거기에 표시됩니다. tasklist에 수동으로 표시하려고 했습니까? 어쩌면 구문 분석이 올바르지 않습니까? –

+0

사실 함수 이름에 유형을 만들었고 getmypid()가 아니라 getmygid()를 호출한다는 사실을 알게되었습니다. 이제 제대로 작동합니다. 귀찮게해서 미안해. :) – Psihius

관련 문제