是否有可能杀死System创建的进程?据我所知,据我所知,System使用fork()函数来创建一个新进程。我想跟踪被调用进程的运行时间(在调用系统之前将其分叉)并在超过运行时间限制时将其终止。如果我杀死由我的主进程创建的子进程,那么由system()创建的子进程也会被杀死吗?
这不是实际的代码,但可能会让我知道我在说什么。
int pid = fork();
if(pid == 0)
{
system("./veryLongProgram");
}
else
{
// calculate time elapsed and kill on long execution time
}
如果我可以使用CPU时间限制,我也更喜欢但是我不希望我的子进程进入睡眠状态。如果确实如此 - 它可能会在这种状态下保持很长时间。是否有可能中断所谓的睡眠,暂停或其他任何故意调用的程序?那将是理想的。或者也许我可以检查我的进程是否正在休眠(在这种情况下,我还必须确保它是故意这样做的,并且由于某些打印或其他原因而没有暂停)?
答案 0 :(得分:2)
exec
代替系统SIGARLM
信号。收到后,使用kill
系统调用来杀死孩子。使用alarm
功能设置闹钟。wait
系统调用等待孩子自然死亡或因接到系统调用而停止。你可以减少刺激,但首先发送TERM
信号并让孩子有机会在发送KILL
信号之前整理一下。