如何对 g++ 设置执行时间限制?
How to put execution time limit on g++?
我使用以下方法来编译我的C++程序。
g++ filename.cpp -o filename.o
然后我获取一个输入文件并将输出定向到另一个文件。
filename.o < in.txt > out.txt
但是,有时代码会进入无限循环,我无法停止它(我强制从活动监视器退出.o
(。
希望它在程序上设置执行限制时间,以便在程序之后自动停止执行。有什么办法吗?
像这样:-g++ filename.cpp -o filename.o [execution_limit_here=10.0s]
编辑:- 我正在创建一个 Atom 包,用户将使用简单的组合键为一组特定的输入文件编译和执行他们的代码。
所以我无法事先预测代码是否会进入无限循环。
g++ filename.cpp -o filename.o
味道很差(即使它可以工作(。按照惯例*.o
文件是目标文件,而不是可执行文件,但在编译命令中,fileno.o
是通过编译和链接的可执行输出(即由g++
生成(。阅读有关调用 GCC 的信息。
我猜你在Linux或POSIX(例如MacOSX,Android...(
我推荐
g++ -Wall -Wextra -g filename.cpp -o filename
在该命令中,我们要求提供所有警告和调试信息,可执行文件名为filename
(没有令人困惑的.o
后缀(。
标准C++不知道时间限制,但 POSIX(所以 Linux 和 MacOSX(知道,我建议将 setrlimit(2( 与RLIMIT_CPU
一起使用。这应该在应用程序中编码(您可以在main
的早期调用setrlimit
(。
否则,编写类似程序的 shell(或使用带有ulimit
的 shell 脚本(以运行具有某些 CPU 限制和/或使用超时 (1( 的可执行文件。
另请参阅时间(7(以了解时间的各种概念。
但是您确实应该调试程序(使用gdb
调试器来了解其行为(,以始终避免无限循环。也许您可以使用一些计时器工具(例如 setitimer(2( 并捕获SIGALRM
信号 (7(;还可以读取 signal-safety(7((和/或在循环中查询经过的实际或 CPU 时间(并根据某个阈值进行检查(。
首先,我建议在你的程序上放打印输出,这样你就可以弄清楚为什么它陷入无限循环,如果你只想有一个时间限制,你可以设置一个开始时间 时钟(((从ctime开始(,并在每次迭代后将当前时间与开始时间点进行比较。
您可以在运行可执行命令时使用超时命令
timeout 5 ./a.out
此命令将仅运行给定命令(在本例中为可执行文件(5秒钟
- 简单C++"Hello World"程序的执行时间长
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 为什么切换 for 循环的顺序会显著改变执行时间?
- cmd.exe与Powershell中C++程序的不同执行时间
- pthread执行时间比顺序执行时间差
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何在Arduino上将时间设置为中部时区?
- 如何测量cudaMalloc执行时间
- c++中的执行时间和检查流状态
- 为什么for循环中的异步不能提高执行时间
- 为什么 C++ openMP 程序执行时间更长
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 需要减少我的C++代码的执行时间
- 如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
- 在Qt中设置pixmap时的执行时间很奇怪
- 异步控制线程执行时间
- 如何对 g++ 设置执行时间限制?
- 预先设置c++代码的执行时间