私は現在、情報を収集して解析し、別のプログラムに送信し、出力を収集してユーザーに表示する PHP UI に取り組んでいます。
通常は問題なく動作します。ただし、他のプログラムが完了するまでに永遠にかかる場合があります (2 時間から 15 時間の間で、一晩実行して朝に終了しました)。ユーザーがプログラムをキャンセルできるようにする KILL ボタンを実装したいと思います。これは、完了するまでに永遠にかかるだけでなく、サーバーを拘束し、その間ユーザーが他の操作を実行できないようにするためです。
現在の設定方法は次のとおりです: page1.php はすべてのユーザー入力を収集します。page2.php はユーザー入力をチェックします。悪い場合は、エラーを出力します。入力に問題がなければ、それを解析し、システム コールで他のプログラムに送信します。これが行われている間、「計算中...」の gif が画面に表示されます。プログラムが終了すると、出力がページに表示されます。
最適には、キルボタンが計算中のgifと同時に(同時にのみ)表示されるようにしたいと思います。また、プロセスを強制終了できるようにしたいと思います(そして、プロセスが実行されたという事実を出力に反映させます)殺された)。
これまでのところ、いつでもどこでもボタンを表示させることができました。ただし、探している実際のキル機能を取得できませんでした。現在、クリック時に実行されるjavascript関数を備えたhtmlボタンを使用してボタンが作成されるように設定しています。そのJavaScript関数には、ターゲットプロセスを見つけてそれらを強制終了するシステムコールを含むphpコードが含まれています(システムコールは、ターミナルウィンドウで使用できるため、正常に機能することがわかっています)。
関連するコードは次のとおりです。
startload("calculating");
$opt->run_optimization($output);
stopload("calculating");
これにより、計算用の gif とキル ボタンが表示され、システム コールを実行する関数が実行され、計算用の gif とキル ボタンが削除されます。
system("./optimi/optimi < $infile > $outfile");
これは、他のプログラム (optimi) へのシステム コールです。
print <<< KILLBUTTON
<br/>
<button type="button" onclick="kill();">Kill</button>
<br/>
<script type="text/javascript">
function kill(){
<?php
system("ps -Af | grep optimi | grep -v grep | awk '{print $2}' | xargs sudo kill");
?>
}
</script>
KILLBUTTON;
これは私のキルボタンですが、今のところ何もしていないようです。
optimi プログラムを書き直すことは、私がそれを書いたのではなく、それが書かれたプログラミング言語の経験がないことを考えると、私は絶対に避けたいことです.
ありがとう。