【发布时间】:2013-01-15 19:13:54
【问题描述】:
我正在开发一个允许用户在服务器上远程运行 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 中是否有办法获取给定进程的句柄...?好像不是。
--编辑
我无法更改服务器上长时间运行的进程的源代码。 :(
【问题讨论】:
标签: linux shell unix process pid