간단한 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