O que impediria que uma tarefa fosse executada em segundo plano?

3

Eu tenho um script que estou tentando iniciar com

php ./Script.php &

A tarefa entra em segundo plano, mas é interrompida. Quando tento executá-lo com bg, ele simplesmente fica parado.

$ jobs
[1]+  Stopped                 php ./Script.php
$ bg
[1]+ php ./Script.php &

[1]+  Stopped                 php ./Script.php
$

ps mostra o estado do trabalho como T

$ ps ax | grep Script
951 pts/5    T      0:00 php ./Script.php

cat / proc / PID / wchan mostra "pipe_wait"

Atualização:

Isso acontece com qualquer script PHP, mesmo <?php sleep(1000) ;

Atualização:

Obrigado por todas as ótimas respostas e comentários. Eu entendo por que isso está acontecendo em um nível técnico agora, mas não sei o que sobre algumas versões do PHP estão causando isso. Mas essa não é uma questão * nix.

    
por chugadie 28.08.2014 / 02:13

2 respostas

5

Quase certamente o comando tentou ler a partir do terminal quando não estava no grupo de processos em primeiro plano. Isso fará com que o kernel envie SIGTTIN para o processo, que por padrão interromperá o processo. Um teste simples seria redirecionar stdin para / dev / null. Se o processo for executado em segundo plano sem ser interrompido, o problema é SIGTTIN, conforme descrito.

    
por 28.08.2014 / 03:16
2

Se a entrada NO terminal (ou stdin) for realmente necessária, você poderá fazer o seguinte:

 php ./Script.php </dev/null &
    
por 28.08.2014 / 03:20