在php脚本中使用exec命令的缺点

时间:2013-09-06 07:31:15

标签: php background exec suspend server-load

在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 &");

请指导我。非常感谢。

2 个答案:

答案 0 :(得分:3)

如果exec()等待命令完成,则完全取决于您的呼叫类型。当然,在服务器上运行大量后台线程可能会产生大量CPU负载。

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

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

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

答案 1 :(得分:1)

您将标准输出和错误输出重定向到文件,我认为在此处使用exec或shell_exec或passthru不会有任何问题。

据我所知,这些是他们的主要差异。
shell_exec():返回整个标准输出(它不会在终端上显示任何内容)

exec():相同的whith shel_exec(),但它返回标准输出的最后一行


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