0

在 PHP 中,

 I need to execute background tasks. So I have three choices to run script from 
 following commands:

 1)exec
 2)shell_exec
 3)passthru

 I randomly decided to use exec command in PHP.
 Because All of these have similar characteristics.

现在我想知道有没有disadvantage of exec() command可以在后台运行的?其实我不太了解这个命令。

它是否与主线程分开线程?如果yes then,有没有办法清理或挂起这个后台线程?或者it simply forget it after firing the command

我问这个是因为在我的代码中需要run this script very fast one after one within moments. 那么它会创建任何服务器负载吗?

编辑: 我正在使用这样的 exec 命令:

exec("/usr/bin/php /path/to/Notification.php >> /path/to/log_file.log 2>&1 &");

请指导我。任何帮助将不胜感激。

4

2 回答 2

3

这完全取决于您拨打的电话类型是否exec()会等待命令完成。当然,在服务器上运行大量后台线程可能会产生大量 CPU 负载。

现在,通常您运行的任何命令exec()都不会在后台运行,这意味着您的 PHP 脚本将等待命令完成执行。为了让您的命令在后台运行,您必须重定向其输出流并通过将其添加到您的命令来明确告诉它在后台运行:

> /dev/null 2>/dev/null &

当然,这样做的缺点是您永远无法从命令中将任何结果检索回 PHP。这将是火和忘记。

于 2013-09-06T07:58:53.813 回答
1

对于您将标准输出和错误输出都重定向到文件,我认为无论您在这里使用 exec 还是 shell_exec 或 passthru 都没有任何问题。

据我所知,这些是它们的主要区别

shell_exec():返回整个标准输出(它不会在终端上显示任何内容)

exec():与 shell_exec() 相同,但它只是返回标准的最后一行output

passthru():这就像调用命令一样,它会在终端上显示输出而不是返回它。

于 2013-09-06T08:43:22.850 回答