gpt4 book ai didi

c - 在不保持父进程执行的情况下获取子进程的返回值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:22 25 4
gpt4 key购买 nike

我需要能够从子进程获取返回值,而不必为它保留父进程的执行。

注意子进程中可能会发生运行时错误。

这是我正在尝试制作的程序:

//In parent process:
do
{
read memory usage from /proc/ID/status
if(max_child_memory_usage > memory_limit)
{
kill(proc, SIGKILL);
puts("Memory limit exceeded");
return -5; // MLE
}
getrusage(RUSAGE_SELF,&r_usage);
check time and memory consumption
if(memory limit exceeded || time limit exceeded)
{
kill(proc, SIGKILL);
return fail;
}
/*
need to catch the returned value from the child somehow with
this loop working.
Notice the a runtime error could happen in the child process.
*/
while(child is alive);

最佳答案

waitpid 函数有一个名为 WNOHANG 的选项,如果给定的 child 尚未返回,它会立即返回:

pid_t rval;
int status;
do {
...

rval = waitpid(proc, &status, WNOHANG);
} while (rval == 0);

if (rval == proc) {
if (WIFEXITED(status)) {
printf("%d exited normal with status %d\n", WEXITSTATUS(status));
} else {
printf("%d exited abnormally\n");
}
}

参见 man page for waitpid有关检查各种异常退出条件的更多详细信息。

关于c - 在不保持父进程执行的情况下获取子进程的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50975304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com