2023年6月18日 星期日

讓暫停的命令列程式繼續執行

 我在Windows 11的命令列模式執行一個模擬程式。這個程式很花時間,而且久久才會有一次螢幕和檔案的輸出動作。我從昨天晚上就放著讓它執行,沒有將筆電關機。希望筆電在進入休眠模式前(無動作後一小時),至少可以有些進度。

今天早上將筆電從休眠模式喚醒,發現這個程式的螢幕輸出結果和檔案的最後更新時間都維持和昨晚我離開時一樣的狀況。這也許是合理的,因為筆電在休眠時這個程式也沒辦法執行。不過從工作管理員觀察,這個程序目前的CPU執行率幾乎是0,表示這個程序被系統暫停了。

怎麼辦呢? 如果我直接關掉它,代表之前的工作白做了,必須全部重頭來一次。想到以前在Unix終端機環境中,可以按Ctrl S來將一個程序的輸出暫停,然後按Ctrl Q繼續。抱著死馬當活馬醫的精神,在這個命令列視窗中試著按Ctrl S,螢幕突然就有輸出了。查看一下輸出檔案的修改時間,也變成了現在的時間。最後到工作管理員觀察,這個程序又有了正常的CPU執行率了。

我猜原先Windows系統大概認定這個程序很久沒動作,不給予任何CPU執行權。我按Ctrl S的動作讓Windows注意到這還是一個活的程序,而重新給予CPU執行權。就這樣,我的程序就復活了。事實上,當程式結束執行時,我看到螢幕上出現我之前按下的^S字元。之後我確認了,在命令列視窗中按任意鍵(例如Enter),都可以使Windows讓一個已經暫停的程序繼續工作,不一定要按Ctrl S。

將這個經驗記錄一下,說不定對誰會有幫助。