C++ 系统创建的终止过程&&限制其执行时间

C++ Killing Process Created by System && Limiting It's Execution Time

本文关键字:执行时间 过程 系统 创建 终止 C++      更新时间:2023-10-16

是否可以终止系统创建的进程?据我所知,System使用fork()函数来创建一个新的进程。我想跟踪被调用进程的运行时间(在调用系统之前分叉),如果超过运行时间限制,就终止它。如果我杀死了主进程创建的子进程,那么系统()创建的子程序也会被杀死吗?

这不是实际的代码,但可能会给出我所说的内容。

int pid = fork();
if(pid == 0)
{
  system("./veryLongProgram");
}
else
{
  // calculate time elapsed and kill on long execution time
}

我也希望我可以使用CPU时间限制,但我不想让我的孩子进程睡觉。如果真的发生了,它可能会在很长一段时间内保持这种状态。是否可以中断任何睡眠、暂停或程序故意调用的任何程序?那将是理想的。或者,我可以检查我的进程是否处于休眠状态(在这种情况下,我还必须确保它是故意的,并且没有因为打印或其他原因而暂停)?

  1. 使用exec而不是系统
  2. 安排家长接收SIGARLM信号。收到后,使用kill系统调用杀死孩子。使用alarm功能设置报警
  3. 让父级使用wait系统调用等待,直到子级自然死亡或因接收系统调用而死亡

你可以让它不那么刺耳,但首先发送TERM信号,并在发送KILL信号之前给孩子一个整理的机会。