0

我的网页中有一个文本区域,用户将在其中粘贴 ac 程序。在服务器端,我将这段代码适当地保存在一个文件中。我使用shell_exec() 函数调用gcc 来执行c 程序。这工作正常。执行部分也是如此。

但是如果用户(非)故意给出一个无限循环怎么办?当我使用该功能时 -

     shell_exec("./a.out")

程序进入无限循环。如何从 php 脚本本身中跳出这样的循环?有办法吗?

4

1 回答 1

0

使用ulimit来限制 CPU 使用率?请注意,这是针对每个进程的,因此如果用户不断地“分叉”该进程,您可能会遇到麻烦。

另一种方法是有一个包装进程来监视并杀死它的所有子进程,然后让它启动 a.out。这取决于您是否可以信任您的“客户”(例如,他们是您的好朋友,或者这是一个学校项目还是一个公共网站)——您的偏执程度应该随着威胁程度的增加而增加。

如果您想要更精细的安全性,请在虚拟机中通过 ssh 运行该过程。然后在 X 秒后杀死虚拟机,然后从保存的快照中启动一个新的虚拟机。(您可以准备好运行 VM 池,因此用户不必等待 VM 加载)

于 2012-12-21T10:25:40.623 回答