C ++ Killing Process由System&& amp;创建限制它的执行时间

时间:2012-02-02 18:19:58

标签: c++ fork kill

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

这不是实际的代码,但可能会让我知道我在说什么。

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

如果我可以使用CPU时间限制,我也更喜欢但是我不希望我的子进程进入睡眠状态。如果确实如此 - 它可能会在这种状态下保持很长时间。是否有可能中断所谓的睡眠,暂停或其他任何故意调用的程序?那将是理想的。或者也许我可以检查我的进程是否正在休眠(在这种情况下,我还必须确保它是故意这样做的,并且由于某些打印或其他原因而没有暂停)?

1 个答案:

答案 0 :(得分:2)

  1. 使用exec代替系统
  2. 安排家长接收SIGARLM信号。收到后,使用kill系统调用来杀死孩子。使用alarm功能设置闹钟。
  3. 让父母使用wait系统调用等待孩子自然死亡或因接到系统调用而停止。
  4. 你可以减少刺激,但首先发送TERM信号并让孩子有机会在发送KILL信号之前整理一下。