我目前正在開發一個PHP UI,它收集信息,解析它,將它發送到另一個程序,收集輸出並將其呈現給用戶。在HTML/PHP中實現'kill'按鈕
通常它工作得很好。然而,有時候,其他程序可能會永遠完成(大約2到15小時之間,我讓它在一夜之間運行,並在早上結束)。我想實現一個KILL按鈕,允許用戶取消該程序,因爲這不僅需要永久完成,而且還要關閉服務器,並防止用戶在此期間執行其他任何操作。
目前設置的方式是這樣的: page1.php收集所有的用戶輸入。 page2.php檢查用戶輸入。 如果不好,它會打印錯誤。 如果輸入是好的,它解析它並通過系統調用將它發送到另一個程序。發生這種情況時,屏幕上會出現'正在計算...'的gif。一旦程序完成,輸出顯示在頁面上。
理想情況下,我希望kill按鈕在計算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;
這是我的殺死按鈕,它現在似乎沒有任何操作。
我要指出的是重寫優化解程序是我想不惜一切代價避免,考慮我不是誰寫它的人,我也不是經歷了它寫在程序設計語言。
謝謝。
'Kill Process'? – JakeParis
我認真地建議您嘗試修復緩慢的程序,而不是僅僅添加一個哈克式的變通辦法。殺死流程中流可以爲您的數據做一些令人討厭的事情。它可能不是,但是你對這個計劃有足夠的瞭解嗎?如果數據仍然需要處理,那麼殺死它並不能解決任何問題,因爲您仍然需要在某個時間點運行腳本,而且它仍然需要很長時間。 – Spudley