我如何自动杀死一个Python使用太多内存的进程?

情况:我有一个网站,允许人们使用不同语言 (特别是我创build的esolang)执行任意代码, 共享托pipe服务器上使用Python解释器。 我在一个单独的进程中运行这个代码,时间限制为60秒。

问题:你可以做一些像(Python等价物) 10**(10**10)这样的东西,它比我分配给我的内存消耗更多的内存。 它也显然locking了Apache – 或者响应时间太长 – 所以我必须重新启动它。

我已经看到这个问题 ,但给出的答案使用Perl,我根本不知道,因此我想在Python中的答案。 不过,操作系统也是 Linux。

具体来说,我想要以下特征:

  1. 自动运行
  2. 强制杀死任何超过内存限制(如1MB或100MB)的进程
  3. 杀死我的代码超过24小时的任何进程

我使用这段代码(在Django视图中)来创build进程并运行它( proxy_prgm是一个Manager,所以我可以从解释esolang代码的程序中检索数据):

 prgmT[uid] = multiprocessing.Process( target = proxy_prgm.runCatch, args = (steps,), name="program run") prgmT[uid].start() prgmT[uid].join(60) #time limit of 1 minute if prgmT[uid].is_alive(): prgmT[uid].terminate() proxy_prgm.stop() 

如果你需要更多的细节,不要犹豫,告诉我要编辑什么(或者问我问题)。

Solutions Collecting From Web of "我如何自动杀死一个Python使用太多内存的进程?"

另一种方法可能有效; 使用resource.setrlimit() ( 在这个其他StackOverflow的答案更多的细节)。 看来这样做你可以设置一个进程的内存限制,它是子进程; 你将不得不弄清楚如何处理,如果极限被打。 我没有使用它的个人经验,但希望这样做会阻止Apache阻止你。