【问题标题】:C++ Killing Process Created by System && Limiting It's Execution Time系统创建的 C++ 杀死进程 && 限制它的执行时间
【发布时间】:2012-02-02 18:19:58
【问题描述】:

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

这不是实际的代码,但可以说明我在说什么。

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

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

【问题讨论】:

    标签: c++ fork kill


    【解决方案1】:
    1. 使用exec 代替系统
    2. 安排父母接收SIGARLM 信号。收到后使用kill 系统调用杀死孩子。使用alarm函数设置闹钟。
    3. 让父级使用wait 系统调用等待子级自然死亡或由于接收系统调用而死亡。

    你可以让它变得不那么苛刻,但首先发送TERM信号,让孩子有机会在发送KILL信号之前整理一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      相关资源
      最近更新 更多