这里有一个场景:我有一个父进程产生了几个子进程。现在每个子进程必须允许运行两秒钟(理想情况下cpu时间),然后父进程让孩子进入睡眠状态或做一些工作。这个循环继续。还有一些子流程可能会在两者之间终止。将要产生的子过程是由一些不可信任的人写的代码。 (这个问题提醒轮询调度ME)如何安排子流程?
我的解决方案和研究:
明显的解决办法:把父两秒钟睡觉,然后醒来并控制孩子。在这里,我们花时间去了解每个进程可能得不到公平的两秒的执行时间。
解决方法二:使用prlimit()与RLIMIT_CPU,并设置一个大hardlimit和软限制两秒开始。随后软限制可能会上升两秒。然后子进程得到一个SIGXCPU信号。
不同的信号(实时信号)可以被分配给每个处理(命中的33更高的极限)。现在收到SIGXCPU信号后,必须使用os.kill()将指定的信号发送给父节点。这里的问题是子进程必须自发地将信号发送给父进程。通过延迟发送信号,子进程可能会获得额外的时间。
解决方案三:再使用setitimer()与ITIMER_VIRTUAL从子进程。 SIGVTALRM信号发送给子进程。它必须将不同的信号(如上所述)转发给父进程。该解决方案与以前的解决方案具有相同的问题。
所有三种解决方案都是灾难。我正在寻找更好的解决方案。一些最简单的代码解释会非常有帮助。
我孩子打印并退出,然后父母将无限期地等待!所以测量CPU时间是不好的。 –
我得出的结论是,使用cpu时间不是明智的,至于隔离时间,我认为问题仍然存在。 –