为什么“php x.php &”会导致后台进程停止

为什么“php x.php &”会导致后台进程停止

x.php:

<?php
sleep(15);
?>

安慰:

$ php x.php &
[1] 5742
[1]+  Stopped                 x.php

结果:一个“已停止”的过程 - 它会一直存在,直到我发送一个TERM信号CONT

我需要的是:top该过程在 15 秒后完成并退出,因此我在或中看不到它htop

系统:VirtualBox 中的 Ubuntu 12.04 LTS;php-fpm

答案1

使用strace我看到程序正在收到一个信号SIGTTOU,这意味着该进程在后台并试图写入终端,或者在这种情况下,更改其一种模式。

ioctl(0, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B38400 opost isig icanon echo ...}) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTTOU {si_signo=SIGTTOU, si_code=SI_KERNEL} ---
--- stopped by SIGTTOU ---

为了解决这个问题,请将输入设置为空:

$ php x.php < /dev/null &

这个问题和这个问题一样:PHP 脚本不会在后台运行

相关内容