この問題は、他の質問の 1 つに対するこの回答に関連しています。この回答でos.kill(pid, 0)
、サブプロセスが終了したかどうかを確認するために使用できると言われました。まだ実行中の場合は、None
が返されます。終了した場合は、 anOSError
が発生します。これで今のところ問題なく動作していますが、サブプロセスが終了しているにもかかわらず、os.kill(pid, 0)
まだ戻ってくる状況に陥っNone
ています。プロセス ID は 82430 で、OSX のアクティビティ モニターで、この ID を持つプロセスが見つかりません。ただし、Python シェルを開いて と入力するos.kill(82430, 0)
と、引き続き が返されますNone
。わかりません。
正確には、上記のように、Ajax GET リクエストを介して Django ビューでサブプロセスのステータスを定期的にチェックします。
サーバー側の Django ビュー
def monitor_process(request):
response_data = {}
try:
os.kill(int(request.GET['process_id']), 0)
response_data['process_status'] = 'running'
except OSError:
response_data['process_status'] = 'finished'
return HttpResponse(json.dumps(response_data), mimetype='application/json')
クライアント側での Ajax 呼び出し
var monitorProcess = function(processId) {
$.ajax({
dataType: 'json',
type: 'GET',
url: '/monitor_process/',
data: {'process_id': processId},
success: function(response) {
if (response.process_status == 'running') {
// Only this branch is always executed
// ...
}
else if (response.process_status == 'finished') {
// This branch never gets executed
// Stop checking for process status
// The periodic check was started by
// window.setInterval in a different Ajax call
clearInterval(monitorProcessId);
// ...
}
}
});
};
プロセスはある時点で停止し、アクティビティ モニターで消えますが、os.kill()
どうやらそれを認識していません。これはなぜですか?どうもありがとうございました!