0

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

$ sleep 100 &

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

但是用 shell_exec() 和 php 尝试同样的事情我得到了不同的结果。

<?php

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

?>

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

谢谢。

4

1 回答 1

3

shell_exec函数正在尝试捕获命令的输出,但在继续处理的同时它无法做到这一点。事实上,如果你查看 php 源代码,phpshell_exec函数会执行popenC 调用,它会wait在命令上执行 syscall。wait保证子进程在子进程退出之前不会返回。

于 2013-10-02T19:15:33.777 回答