几秒钟后终止shell_exec()

时间:2014-07-05 13:26:16

标签: php shell-exec

所以我有这个代码,我执行一个c ++程序。 $out只包含程序的输出。

$cmd = "c:/Server/www/Codice/LOGS/".$_SESSION['username']."/chorva.exe";
$out = shell_exec($cmd);
echo $out;

这很有效。但是,我想在几秒钟之后终止程序,比如在6-10秒之后。 (当你在终端时,这相当于Ctrl-C。)如果程序执行时间过长(或无限循环,例如无限循环),则情况如此,它不必等待。我也关心它在那个时间产生的输出(如果可能的话)。我怎样才能做到这一点?谢谢!

1 个答案:

答案 0 :(得分:1)

在Windows PHP中,似乎不是一种异步运行程序并读取其输出并在一段时间后将其删除的方法,因此我建议使用外部程序来执行此操作。

我不知道是否已经存在任何此类程序,但您始终可以创建自己的程序。假设您想要坚持使用脚本语言,这里是VBScript上此类程序的一个示例

Dim WshShell, objFSO, oExec, cmd, wait, tempFile, objFile
Set WshShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

wait = WScript.Arguments(0)
cmd = WScript.Arguments(1)
tempFile = objFSO.GetTempName()

Set oExec = WshShell.Exec(cmd & " > " & tempFile)

Do While oExec.Status <> 1
     WScript.Sleep 100
     wait = wait - 100
     If wait <= 0 Then Exit Do
Loop

oExec.Terminate()

Const ForReading = 1
Set objFile = objFSO.OpenTextFile(tempFile, ForReading)
Do While objFile.AtEndOfStream = False
    Wscript.Echo(objFile.ReadLine())
Loop
objFile.Close()
objFSO.DeleteFile(tempFile)

该脚本运行一个程序cmd,等待它以100毫秒的时间间隔死亡,如果它没有在wait毫秒内死亡,则将其杀死。程序输出保存到临时文件中,该文件被读取并回显。 waitcmd是第一个和第二个脚本参数。该脚本以

运行
cscript //Nologo runcmd.vbs <time> <cmd>