我有这个构建系统,我想修改它,让它超过10秒就会自动杀死进程,怎么做?
{
"cmd": ["g++.exe","-std=c++17", "${file}", "-o", "${file_base_name}.exe", "&&" , "${file_base_name}.exe"],
"shell":true,
"working_dir":"$file_path",
"selector":"source.cpp"
}
由于一个 sublime-build
只是在执行一个外部进程,一种方法是让构建执行一个外部工具(或脚本或批处理文件等),它可以跟踪时间,并自行关闭。
第二种方法是在Sublime内部使用自定义构建目标。这是一个通过插件提供的命令,你告诉Sublime使用这个命令来代替它通常会使用的命令来执行构建。
下面是一个插件的例子。请看这个视频 如何使用插件 如果你不熟悉在Sublime中使用自定义插件。
import sublime
import sublime_plugin
from Default.exec import ExecCommand
class TimeoutExecCommand(ExecCommand):
"""
Drop in replacement for the exec command in Sublime Text build 3210/3211.
"""
def run(self, **kwargs):
self.timeout = kwargs.pop("timeout", 0)
super().run(**kwargs)
if self.timeout:
sublime.set_timeout(self.time_out_build, self.timeout * 1000)
def time_out_build(self):
if self.proc:
self.append_string(self.proc, "[Timeout exceeded: %.1f]" % self.timeout)
self.proc.kill()
self.proc = None
这实现了一个新的 timeout_exec
命令,如果在特定时间内没有完成,可以在构建中使用该命令让它们超时。正如评论中所提到的,需要一个最新的 Sublime Text 3 版本(它在 4xxx 版本中不起作用,因为那些版本有一个增强的 exec
命令)。)
要使用这个命令,你需要在你的 sublime-build
文件。使用这个文件的一个例子是。
{
"target": "timeout_exec",
"cancel": {"kill": true},
"timeout": 4,
"shell_cmd": "echo \"Start\" && sleep 10 && echo \"Done\""
}
The target
键告诉Sublime使用这个新命令,而不是默认的 exec
命令和 cancel
键告诉Sublime,如果你试图手动取消构建(例如从菜单、命令调色板等),要提供哪些额外的参数。
命令还实现了一个新的构建参数,即 timeout
是指在超时后,构建将自行取消的时间(秒)。如果超时时,构建仍在运行,则会自动取消。
Start
[Timeout exceeded: 4.0]
撇开 timeout
字段或将其值设置为 0
禁用超时,在这种情况下,该命令的行为与正常情况下的构建完全相同。