비동기적으로/다른 프로세스에서 스크립트 실행

비동기적으로/다른 프로세스에서 스크립트 실행

간단한 PHP 스크립트가 있습니다

<?php
for($i=0;$i<10;$i++){
sleep(1);
echo $i;
}

명령줄에서 실행합니다.

php myfile.php &

스크립트가 끝나기 전에도 명령줄에서 다른 작업을 수행할 수 있었으면 좋겠습니다.
프롬프트가 표시되지만 Enter 키를 누르면 [1]+ Stopped php myfile.php

답변1

이는 터미널에 이 옵션이 활성화되어 있으면 예상되는 현상입니다 tostop. 일단 설정되면 터미널로 출력을 시도하는 모든 백그라운드 프로세스는SIGTTOU기본 핸들러가 프로세스를 중지하는 신호입니다. (이는 백그라운드 프로세스의 출력으로 인해 터미널이 복잡해지지 않도록 하기 위한 것입니다.)

stty -tostop동일한 터미널에서 실행하여 이 기능을 비활성화 할 수 있습니다 .

현재 상황:

$ stty tostop
$ php ./t.php &
[1] 6484
$ 
[1]+  Stopped                 php ./t.php
$ # no messing up of the terminal, process stopped
$ fg
php ./t.php
0^C
$ 

이 기능을 비활성화합니다:

$ stty -tostop
$ php ./t.php &
[1] 6481
$ # 01an2d 3now 45 6it m7esses 8up 9my term!

답변2

더 나은 솔루션이 있을 수 있지만 Ubuntu에서는 포그라운드에서 실행하고 다음을 사용하여 일시 중지하면 작동합니다.Ctrl-Z, 다음을 배경으로 사용하십시오 bg.

$ php myfile.php 
^Z
[4]+  Stopped                 php myfile.php
$ bg
[4]+ php myfile.php &
$ 2#3 it4 mess5es up 6my 7term8in9al too!
[4]   Done                    php myfile.php

관련 정보