所以我有这段代码,我在这里执行一个c++程序。$out只包含程序的输出。
$cmd = "c:/Server/www/Codice/LOGS/".$_SESSION['username']."/chorva.exe";
$out = shell_exec($cmd);
echo $out;而且这很管用。然而,我想在几秒钟后终止程序,比如说在6-10秒之后.(这相当于终端中的Ctrl-C。)如果程序执行时间太长(或者无限循环),则不必等待。我还关心它在那个时候产生的输出(如果可能的话)。我该怎么做?谢谢!
发布于 2014-07-05 15:13:46
在Windows中,似乎没有一种方法可以异步运行程序,读取其输出并在一段时间后将其终止,因此我建议使用外部程序来执行。
我不知道是否已经存在这样的程序,但是您可以始终创建自己的程序。如果您想坚持使用脚本语言,下面是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毫秒内死掉,就杀死它。程序输出被保存到一个临时文件中,该文件被读取并回显。wait和cmd是第一个和第二个脚本参数。脚本运行为
cscript //Nologo runcmd.vbs <time> <cmd>https://stackoverflow.com/questions/24586888
复制相似问题