2013-04-25 4 views
1

CLI에서 실행하는 PHP 스크립트가 있습니다.우분투에서 어떻게 PHP에서 여러 개의 동시 터미널을 실행할 수 있습니까?

foreach($array as $key => $value){ 

    exec("gnome-terminal -e php myscript.php $key $value > /dev/null"); 

} 

내가 일을 기대하고하는 것은 새 터미널 팝업과 동시에 별도의 터미널 창에서 내 스크립트 및 관련 인수를 실행하는 것입니다 : 나는 다음과 같은 루프가 스크립트 내부

.

데이터를 시각화 할 수있는 것은 단순히 디버깅을위한 것입니다. 스크립트가 제대로 작동하는지 확인한 후 다음 명령을 사용하여 백그라운드에서 실행하고 싶습니다.

exec("php myscript.php $key $value" > /dev/null &); 

그러나 예상대로 작동하지 않습니다. 두 번째 명령은 실행 되더라도 첫 번째 스크립트가 완료 될 때까지 기다렸다가 루프의 다음 반복 단계로 이동합니다.

저는 우분투 12.04를 사용하고 있습니다. 디버깅을 위해 이들을 동시에 실행할 수있게하려면 어떻게해야합니까?

+1

다른 PHP 프로세스를 실행하고 있기 때문에, 당신은 포크를 사용하여 고려 했는가? http://php.net/manual/en/function.pcntl-fork.php –

+0

'&'를 추가하여 그놈 터미널을 백그라운드로 실행하십시오. –

+0

@therefromhere 나는 pcntl_fork()에 익숙하지 않다. php.net 문서는 나에게 분명하지 않습니다. 어떻게 사용하는지 예제를 줄 수 있습니까? – user658182

답변

0

다음과 같은 문제가있을 수 있습니다. 웹 서버가 나와 다른 사용자로 실행되고 있습니다. X-Server가 어디에 있고 X-Server가 다른 사용자의 connectiosn을 허용하지 않는지는 알 수 없습니다. 따라서 두 가지를해야합니다 :

PHP에서 그놈 터미널을 실행할 때 DISPLAY 변수가 설정되어 있는지 확인해야합니다. 이 작업을 수행해야합니다.

exec("DISPLAY=":0" gnome-terminal -e php myscript.php $key $value > /dev/null &"); 

원격 연결을 허용해야합니다. X-Session에서 실행중인 터미널에서 xhost +으로 처리 할 수 ​​있지만 모든 연결이 허용되므로주의해야합니다.

+0

그의 질문에 대한 이해에서, 코드는 gnome-terminals을 단지 병렬로 실행하지 않습니다. –

+0

두 번째 명령 만 실행되지만 병렬로는 읽지 않습니다. –

+0

완벽하게 작동합니다. –

관련 문제