【问题标题】:How do I know when the task from command line is finished?我如何知道命令行中的任务何时完成?
【发布时间】:2012-10-12 18:33:41
【问题描述】:
这非常重要,因为我在 Google 中找不到任何我想要的东西。
我如何知道命令行执行的应用程序(或者将其称为任务更合适?)何时完成?如果我这样做,PHP如何知道复制多个文件的任务是否完成:
exec("cp -R /test/ /var/test/test");
即使命令仍在后台运行以进行复制,PHP 脚本是否继续转到下一个代码?还是 PHP 脚本等到复制完成?以及命令行应用程序在完成后如何通知脚本(如果有的话)?一定有某种互动正在发生。
【问题讨论】:
标签:
php
linux
command-line
interaction
【解决方案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
}
?>
【解决方案2】:
它一直等到 exec 调用返回,无论它返回什么。
但是,退出调用可能会返回,尽管它已启动的命令尚未完成。如果您从控件中分离出来,可能就是这种情况,例如通过在命令末尾显式指定“&”。