提问人:Siddharth Mohanty 提问时间:10/29/2023 更新时间:10/29/2023 访问量:44
getrusage() 没有为 Child 进程提供正确的 rss 值
getrusage() not giving the correct rss value for the Child process
问:
我在 C++ 中编写了以下代码,以在沙盒环境中运行 C++ 代码,然后获取其内存使用情况
int main() {
int pid = fork();
if(pid == -1){
perror("fork");
exit(EXIT_FAILURE);
}
else if(pid == 0){
cout<<"I am the child process"<<endl;
const char* command = "/bin/sh";
const char* arg1 = "sh";
const char* arg2 = "-c";
const char* arg3 = "/user_code/myprogram < /user_code/input.txt > /user_code/output1.txt";
execlp(command, arg1, arg2, arg3, (char*)NULL);
perror("execl");
exit(EXIT_FAILURE);
}
else{
cout<<"I am the parent process"<<endl;
int status;
struct rusage ru;
wait(&status);
if (WIFEXITED(status)) {
getrusage(RUSAGE_CHILDREN, &ru);
cout << "Memory usage (in KB): " << ru.ru_maxrss << endl;
} else {
cout << "Child process did not exit as expected." << endl;
}
}
}
上面的代码打印:
I am the parent process
I am the child process
Memory usage (in KB): 3584
那是非常少的RSS。当我在 python 中运行相同的逻辑时,我得到的 rss 为 9440 KB,与我在 codeforces 上提交的相比是准确的
我厌倦了在 python 上运行逻辑。在那里,它给出了正确的响应。
我的python代码给出了正确的响应:
import subprocess
import resource
p = subprocess.Popen("/user_code/myprogram < /user_code/input.txt > /user_code/output2.txt", shell=True)
p.wait()
print(resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss)
这打印了 9440 KB。
答: 暂无答案
上一个:这些类型的声明意味着什么
下一个:跟踪子进程的内存使用情况
评论
getrusage
Popen
Time: 0 ms, memory: 9300 KB