如果我直接在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中缺少的细微差别。
感谢。
答案 0 :(得分:3)
shell_exec
函数正在尝试捕获命令的输出,这是在继续处理时无法执行的。事实上,如果你看一下php源代码,php shell_exec
函数会进行popen
C调用,它会对命令执行wait
系统调用。 wait
保证子进程在子进程退出之前不会返回。