从php运行后台运行unix进程

时间:2013-10-02 19:07:46

标签: php shell unix

如果我直接在shell中运行这个unix命令:

$ sleep 100 &

睡眠按预期在后台运行,我可以继续在命令行中工作。

但是使用shell_exec()和php尝试相同的操作我会得到不同的结果。

<?php

  $sleep = $argv[1];
  $shell="sleep " . $sleep . " &";
  shell_exec($shell);

?>

执行php sleep.php 100时,命令行会挂起,并且在睡眠完成之前不会再接受任何命令。我不确定这是否是我在PHP的shell_exec() / $argv或unix shell中缺少的细微差别。

感谢。

1 个答案:

答案 0 :(得分:3)

shell_exec函数正在尝试捕获命令的输出,这是在继续处理时无法执行的。事实上,如果你看一下php源代码,php shell_exec函数会进行popen C调用,它会对命令执行wait系统调用。 wait保证子进程在子进程退出之前不会返回。