ユーザーがリモートでサーバー上で AI アルゴリズムを実行できるようにするアプリケーションを開発しています。これらのアルゴリズムの中には、非常に長い時間がかかるものがあります。AJAX 呼び出しがアルゴリズム パラメータを提供し、サーバー上で C++ アルゴリズムを起動するように設定されています。計算の結果とステータスは、AJAX 呼び出しのポーリング ステータス ファイルを介して追跡されます。このソリューションは、サービスを同時に使用する複数のユーザーに対してうまく機能するようですが、現在、ユーザーのブラウザーから計算をキャンセルする方法を探しています。AJAX 更新サービスを停止し、ブラウザとサーバー上で実行中のプロセスとの間の通信を停止する停止ボタンがあります。問題は、プロセスがまだ実行されていることです。ユーザーが操作をキャンセルしたときにサーバー リソースを解放したいと考えています。以下に詳細を示します。
AJAX
呼び出しがヒットした Web サービスはユーザーの下で実行'tomcat'
され、ps -U tomcat で一覧表示できます。アルゴリズムの実行はすべて「java」の子プロセスであり、ps --ppid ###
.
ブラウザは、現在の計算が開始された時刻の記録を保持します (サーバー システム時間ではなく、ユーザー システム時間)。
異なる場所から接続されたユーザーから複数の計算が同時に行われる可能性があり、その結果、同じ名前と親プロセスの下に多くのプロセスが作成されます。
restful サービスは、 java 経由で端末コマンドを実行しますruntime.exec()
。
私はシェルスクリプトについてあまり詳しくないので、助けていただければ幸いです。Javaプロセスオブジェクトまたはシェルスクリプト/ awkを使用してtimestamp
(おそらくユーザーシステム時間に最も近いタイムスタンプ..?)または他の方法でプロセスを見つける方法を考えられる人はいますか?
前もって感謝します。
- 編集
pid がある場合、Java で特定のプロセスのハンドルを取得する方法さえありますか? そのようには見えません。
- 編集
サーバー上で長時間実行されているプロセスのソース コードを変更できません。:(