首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >几秒钟后终止shell_exec()

几秒钟后终止shell_exec()
EN

Stack Overflow用户
提问于 2014-07-05 13:26:15
回答 1查看 519关注 0票数 2

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

代码语言:javascript
复制
$cmd = "c:/Server/www/Codice/LOGS/".$_SESSION['username']."/chorva.exe";
$out = shell_exec($cmd);
echo $out;

而且这很管用。然而,我想在几秒钟后终止程序,比如说在6-10秒之后.(这相当于终端中的Ctrl-C。)如果程序执行时间太长(或者无限循环),则不必等待。我还关心它在那个时候产生的输出(如果可能的话)。我该怎么做?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-05 15:13:46

在Windows中,似乎没有一种方法可以异步运行程序,读取其输出并在一段时间后将其终止,因此我建议使用外部程序来执行。

我不知道是否已经存在这样的程序,但是您可以始终创建自己的程序。如果您想坚持使用脚本语言,下面是VBScript上这样一个程序的示例

代码语言:javascript
复制
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是第一个和第二个脚本参数。脚本运行为

代码语言:javascript
复制
cscript //Nologo runcmd.vbs <time> <cmd>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24586888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档