如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
How to get execution time and memory usage of a program (c,c++,java,python,php) in php script on ubuntu?
我正在尝试使用带有laravel的php构建一个在线判断网站,该网站可以判断用户提交的代码。服务器环境是 ubuntu。
每个问题都有一个输入文件和相应的输出文件,以及代码的最大执行时间限制和内存使用限制。
假设,对于一个问题,输入文件 input.in,输出文件是正确的。法官将运行用户的代码并生成输出文件,并将其与 correct.out 进行比较,以检查解决方案是否正确。它还将检查代码是否在给定的时间限制和内存限制内运行。
允许用户使用c,c ++,java,python或php提交他们的解决方案
我做了什么:
对于 c++ 代码,假设用户的代码是 code.cpp。我在我的 php 脚本中使用了 exec((,如下所示:
exec('g++ -o code code.cpp');
这将创建一个名为"code"的可执行文件。
现在,我已经使用 input.in 文件运行可执行文件,并使用以下命令生成了 output.out 文件:
exec('./code < input.in > output.out');
这将给出输出文件。
现在我需要知道程序执行花费了多少时间,以及它用于在代码中运行或声明变量、数组或其他数据结构的内存量。
我可以通过计算执行的开始时间和结束时间之间的差异来找到执行时间。
我的问题是:
有没有更好的方法来找到执行时间?
如何找到程序使用了多少内存?
如何检查编译错误,运行时错误?
你回答:
-
我认为没有比这更好的方法可以直接测量
exec
运行多长时间。 -
探查器是唯一的方法(
valgrind
(。但是,探查器会影响性能(它会以破坏性方式降低性能(。当进程仍在运行时,您可以通过以下命令检查其内存使用情况:grep VmPeak /proc/$PID/status
精度会非常差,对于类似于echo
的快速过程,您甚至可以没有时间运行此 shell 命令。
- 检查
- 退出代码(从
g++
和./code
(检查错误。对于g++
,关于自定义程序,它可以有自定义逻辑并使用自己的协议来报告错误,但通常如果./code
遵循惯例,则必须在错误时将退出代码设置为非零。
但是,一般来说,不能保证理解程序是否正确运行,因为"正确"是关于语义而不是纯编码。"正确"是软件作者希望它工作的方式。如果软件作者认为软件必须使用特定代码退出,他可以独立于任何内部错误来执行此操作。
例如,请参阅以下代码:
#include <iostream>
#include <cstdlib>
int main()
{
int z = 1;
int y = 1;
int x = 1 / (z - y);
return 0;
}
它生成"除以零"异常。
让我们编译并执行它:
$ g++ program_1.cpp -o program_1
$ ./program_1
Floating point exception (core dumped)
$ echo $?
136
程序以代码136
退出;原因是 C 运行时实现的默认除以零信号处理程序与此代码一起退出。
如果我们添加自己的信号处理程序,退出代码仍将0
:
#include <iostream>
#include <cstdlib>
#include <sys/types.h>
#include <signal.h>
void signal_handler (int signo)
{
if(signo == SIGFPE)
exit(0);
}
int main()
{
signal(SIGFPE,(*signal_handler));
int z = 1;
int y = 1;
int x = 1 / (z - y);
return 0;
}
因此,当您运行完全未知的外部代码时,几乎不可能理解它真正的作用;例如,病毒的工作方式与预期不同。
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
- 无论如何可以使用 C++/C 甚至 python 和 php
- C++,Python或PHP,不定式循环
- 在Java/PHP/Python框架内,在编译的C/C++代码中运行算法
- PHP imagettftext() 等效函数 C++/Java/Python 中的函数