2012-01-26 4 views
3

그래서 PHP에서 다음을 할 수 있기를 바랍니다. 명령 줄에서 스크립트를 호출합니다.PHP 명령 행 리더

/usr/bin/php mychildren.php 

두 스크립트 모두 무기한으로 활성 상태로 유지되는 두 개의 하위 프로세스를 만들 수있게하려고합니다. (무한 루프 = D라고합시다).하지만 아이들 프로세스가 가끔씩 첫 번째 프로세스에서 인사를하고 두 번째 프로세스에서 작별 인사를하기를 바랍니다. 그리고 나서 pcntl_signal을 사용하여 신호 인터럽트 (ctrl + c)를하면 2 개의 자식 프로세스를 죽일 수 있고 일단 내가 죽었다는 확인을 받으면 부모 프로세스를 죽입니다.

이것도 가능합니까?! 나는 약간의 스트리밍을 들여다 보았고 나는이 일을하는 방법에 관해서는 수시로 혼란스러워했다. 작동해야하는 것처럼 보이지만 제대로 작동하는 데 아무 것도 얻을 수 없습니다.

빠른 세부 사항 : 이 아이가 각 자식 프로세스를 처리 나는 아이들이 죽는 부모를 죽일 때 가끔 임의 뭔가를 메아리, 그들은 죽은 후에는 서브 프로세스를 만들 pcntl_fork를 사용할 수 있지만 다음 부모가

+0

다음을 살펴보십시오. http://php.net/manual/en/refs.fileprocess.process.php 아마도 IPC를 원할 것입니다. – Brad

답변

1

다이 , 종종 하위 프로세스를 proc_open으로 실행하는 것이 좋습니다. pcntl_signal을 사용하여 (서브 프로세스를 종료하기 위해) 신호 핸들러를 설치하십시오. 자식 프로세스가 같은 출력에 직접 쓰길 원한다면 동시에 두 가지 쓰기를 피하기 위해 일종의 IPC를 구현해야한다.

따라서 두 프로세스가 모두 주 프로세스에 쓰게하고 주 프로세스가 전체 라인을 기다리거나 다른 방법으로 출력을 동기화하도록하는 것이 좋습니다.

+0

어떻게 두 아이가 메인 프로세스에 글을 씁니까? 예를 들어, 자식 프로세스는'echo "hello";'라고 쓰고 부모 프로세스의 echo를 어떻게 써야할까요? 그리고 하위 프로세스가 실행되는 동안에도 부모로부터 계속 반향 출력 할 수 있습니까? –

+0

이렇게하는 가장 쉬운 방법은'proc_open'이 당신을 위해 모든 내부를 투명하게 처리 할 것이기 때문에'fork' 대신에''proc_open' (http://php.net/proc_open)을 호출하는 것입니다. 예를 들어 성능상의 이유로, 또는 메인 프로그램의 중요한 부분과 그 하위의 데이터에 접근하기를 원하기 때문에'fork'를 사용해야한다면,''posix_mkfifo'] (http : //php.net/manual/en/function.posix-mkfifo.php). 불행히도 php는 ['pipe'] (http://linux.die.net/man/2/pipe)에 대한 래퍼를 가지고 있지 않습니다. – phihag

+0

포크를 사용하여 결국 전체 proc_open 개념이 나를 혼란스럽게 만들었습니다. 부모님이 반드시 기다려야하고 열리는 모든 프로세스를 제어 할 수있는 방법을 모르겠습니다. 어쩌면 미래에 나는 그것을 배울 것입니다. 그래도 고마워! –