executa o script de forma assíncrona / em um processo diferente

1

Eu tenho um script php simples

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

Que eu corro da linha de comando

php myfile.php &

Eu esperaria poder fazer outras coisas na linha de comando, mesmo antes do fim do script.
Eu recebo um aviso, mas quando eu pressiono a entrada eu recebo [1]+ Stopped php myfile.php

    
por Itay Moav -Malimovka 04.01.2012 / 19:43

2 respostas

2

Isso é esperado se o seu terminal tiver a opção tostop habilitada. Quando isso é definido, qualquer processo em segundo plano que tenta gerar saída para o terminal recebe o sinal SIGTTOU , e o padrão desse sinal O manipulador interrompe o processo. (Isso é feito para que a saída dos processos em segundo plano não atrapalhe seu terminal.)

Você pode desativar esse recurso executando stty -tostop no mesmo terminal.

Sua situação atual:

$ 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
$ 

Desativar esse recurso:

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

Provavelmente há uma solução melhor, mas para mim, no Ubuntu, funciona se você a executar em primeiro plano e suspendê-la com Ctrl-Z e, em seguida, usar o fundo com 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
    
por 05.01.2012 / 04:35