작업이 백그라운드에서 실행되는 것을 방지하는 것은 무엇입니까?

작업이 백그라운드에서 실행되는 것을 방지하는 것은 무엇입니까?

실행하려는 스크립트가 있습니다.

php ./Script.php &

작업이 백그라운드로 전환되었지만 중지되었습니다. bg를 사용하여 실행하려고 하면 계속 중지됩니다.

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

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

ps는 작업 상태가 T임을 보여줍니다.

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

cat /proc/PID/wchan은 "pipe_wait"를 표시합니다.

고쳐 쓰다:

이는 모든 PHP 스크립트에서 발생할 수 있습니다 <?php sleep(1000).

고쳐 쓰다:

모든 훌륭한 답변과 의견에 감사드립니다. 이제 기술 수준에서 이런 일이 발생하는 이유를 이해하지만 특정 PHP 버전에서 이러한 현상이 어떻게 발생하는지 잘 모르겠습니다. 그러나 이것은 *nix 문제가 아닙니다.

답변1

이 명령은 터미널이 포그라운드 프로세스 그룹에 속하지 않을 때 터미널에서 데이터 읽기를 거의 확실히 시도합니다. 이로 인해 커널은 SIGTTIN을 프로세스에 보내며 기본적으로 프로세스가 중지됩니다. 간단한 테스트는 stdin을 /dev/null로 리디렉션하는 것입니다. 프로세스가 중지되지 않고 백그라운드에서 실행 중인 경우 문제는 위에서 언급한 SIGTTIN입니다.

답변2

터미널(또는 표준 입력) 입력이 실제로 필요하지 않은 경우 다음을 수행할 수 있습니다.

 php ./Script.php </dev/null &

관련 정보