我正在开发一个应用程序,允许用户在服务器上远程运行 AI 算法。其中一些算法需要很长时间。它的设置使得 AJAX 调用提供算法参数并在服务器上启动 C++ 算法。通过 AJAX 调用轮询状态文件来跟踪计算的结果和状态。该解决方案似乎适用于同时使用该服务的多个用户,但我现在正在寻找一种方法来取消用户浏览器的计算。我有一个停止按钮,用于停止 AJAX 更新服务并停止浏览器与服务器上正在运行的进程之间的任何通信。问题是进程还在运行,我想在用户取消操作时释放服务器资源。以下是更多细节。
AJAX
调用命中的 Web 服务在用户下运行'tomcat'
,可以通过 ps -U tomcat 列出。算法执行都是“java”的子进程,可以用ps --ppid ###
.
浏览器记录当前计算开始的时间(用户系统时间,而不是服务器系统时间)。
从不同位置连接的用户可能会同时进行多个计算,从而导致许多进程具有相同的名称和父进程。
restful 服务通过 java 执行终端命令runtime.exec()
。
我对shell脚本不是很了解,所以任何帮助都将不胜感激。谁能想到一种方法来使用java进程对象或shell脚本/awk通过timestamp
(可能是最接近用户系统时间的时间戳......?)或其他方式来定位进程?
提前致谢。
- 编辑
如果您有 pid...,在 java 中是否有办法获取给定进程的句柄?看起来不像。
- 编辑
我无法更改服务器上长时间运行的进程的源代码。:(