2012-02-02 72 views
0

是否有可能杀死由System创建的进程?迄今为止,据我所知,System使用fork()函数来创建一个新的进程。我想跟踪调用的进程的运行时间(在调用系统之前将其分开),如果超出运行时间限制,则将其终止。如果杀死我的主流程创建的孩子,系统()创建的孩子是否也会被杀死?由系统创建的C++杀死进程&&限制它的执行时间

这不是实际的代码,但可能会给我一个想法,我在说什么。

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

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

回答

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

你可以把它少一点苛刻,但首先第一发送TERM信号,并给孩子一个机会,发送KILL信号之前收拾。