【发布时间】:2018-01-12 10:23:22
【问题描述】:
我想调用proc_open在后台执行一个脚本,后台进程会在几秒后终止。基本上,该脚本是一个 C/Java/Python 脚本,它将编译和运行用户提交的代码,所以我希望该进程能够在一段时间后终止。
我想要实现的是,当后台运行脚本的执行时间超过 3 秒时,停止进程并停止写入文件。假设我运行一个 for 循环将某个字符串的1 million lines 写入文件,然后在time >= 3 seconds 处,进程停止。当我取回文件时,我会得到类似200k lines 的字符串。然后我可以将文件的输出显示回浏览器。
我目前正在使用来自https://blog.dubbelboer.com/2012/08/24/execute-with-timeout.html 的函数exec_timeout。
然后我执行一个命令exec_timeout("exec nohup java -cp some_dir compiled_java_file &", 3),后台进程即使已经超过超时值也不会终止,而是会继续写入文件直到完成。然后只有我可以将结果回显到浏览器。如果用户提交无限运行代码,该进程将一直挂在那里,直到我在 ec2 linux 实例中将其杀死。
知道为什么它没有按预期运行吗?或者有什么更好的功能可以实现我的目标?我的应用程序使用 PHP 开发并托管在 AWS Elastic Beanstalk 上。
【问题讨论】:
标签: php linux amazon-elastic-beanstalk shell-exec proc-open