如何知道命令行中的任务何时完成?

时间:2012-10-22 21:20:39

标签: php linux command-line interaction

这非常重要,因为我在谷歌找不到任何我想要的东西。

如何知道命令行执行的应用程序(或者更适合称之为任务?)何时完成?如果我这样做,PHP如何知道复制多个文件的任务是否完成:

 exec("cp -R /test/ /var/test/test");

即使命令仍然在后台运行以进行复制,PHP脚本是否仍继续转到下一个代码?或者PHP脚本是否等到副本完成?命令行应用程序如何在脚本完成时通知脚本(如果有)?必须进行某种互动。

2 个答案:

答案 0 :(得分:1)

php的exec返回一个字符串,所以是的。您的网页将冻结,直到命令完成。 例如,这个简单的代码

<?PHP
echo exec("sleep 5; echo HI;");
?>

执行时,当页面加载5秒钟时显示,然后显示:

 HI;

如果我这样做,PHP如何知道复制多个文件的任务是否完成?

Php不知道,它只是运行命令并不关心它是否有效但是返回从该命令生成的字符串。这就是为什么使用PHP的复制命令更好,因为它在统计时返回TRUE / FALSE。或者创建一个bash / sh脚本,该脚本将返回0 / FALSE或1 / TRUE,以确定如果您要执行此路由,命令是否成功。然后你可以这样PHP:

<?PHP
$answer = exec("yourScript folder folder2");
if ($answer=="1") {
//Plan A Worked
} else {
//Plan A FAILED try PlanB
}
?>

答案 1 :(得分:0)

等待exec调用返回,无论它返回什么。

然而,虽然它已启动的命令尚未完成,但可能是退出调用返回。如果您从控件中分离,可能就是这种情况,例如明确指定“&amp;”在命令的最后。