多程序 socket exit的問題

2021-05-21 13:48:05 字數 971 閱讀 3825

寫了乙個 forking 多程序socket 的 server 原型

執行系統是fb。  卻發現 ctrl + c  無法關閉這個正在監聽的程式。

看**首先。 我自定義捕獲ctrl + c 訊號 

在捕獲訊號裡面 使用了 sys.exit() 退出 程式。

再看下監聽部分:

不斷在監聽,是否有客戶端連線,如果產生異常就 continue 繼續回到上頭去監聽。

問題:為啥就ctrl + c 就退出不了呢。加了除錯引數(就是帶注釋的那些)研究了半天。終於明白了

ctrl +c  以後丟擲了 keyboardinterrupt 異常,而我在捕獲訊號函式裡面,又使用了 sys.exit() 方法,這個方法會丟擲 systemexit

這個看手冊才知道:  this is implemented by raising the systemexit

exception

異常而覆蓋了前面的 keyboardinterrupt。 就這樣**是以 systemexit異常而跑到了 except: 異常處理區。 而異常處理區里我使用了 continue 讓程式回到監聽狀態。就這樣導致了 sys.exit() 無效了等於。 可以做個小實驗證明這個答案是否正確。 看上面**,我在異常處理區加入了  time.sleep(2)   讓程式在異常處理區卡住執行兩秒。

然後再執行這個程式。結果是。我連續按兩下 ctrl + c ,就可以正常退出了 程式。   這個很好理解了。  因為當我第一次按下 ctrl + c 的時候。程式跑到了 異常處理區而且  time.sleep(2) 兩秒。 就在這會我繼續 來多一次 ctrl + c 等於又多發出乙個異常。但這會的程式是執行在異常處理區,而異常處理區我沒有再處理這裡發生的異常了。所以這會**就執行到這裡

sys.exit() 發出了退出的異常。沒人接收這個異常的話,就直接退出了程式。

解決辦法就是。不要 捕獲  keyboardinterrupt  和  systemexit 。

iis web園多程序 與session的問題

iis 應用池設定了 web 園 多執行緒 開始發現有些頁面資訊不對。本以為是快取的問題,清除快取仍然沒有效果。進一步發現出現問題都是在使用session的頁面。net為我們提供了三種會話狀態儲存機制。一種程序內模式 問題模式 會話狀態儲存在程序內。兩種程序外模式 狀態機模式,會話狀態村處於網路狀態...

Pycharm執行多程序Pool出現的問題

在執行專案 的時候發現程式遲遲沒有結束,執行了乙個多小時也不見結束。最後通過debug發現在多程序pool.map 函式處,當執行到此處的時候,程式就陷入了死鎖,再也沒有跳出來,也沒有在繼續往下執行 若正常執行,則應該會多次列印10,但實際並沒有發生。不過我使用控制台執行程式則順利的列印出字元。列印...

Android 9 0 WebView多程序問題

問題描述 android 9.0及以上版本,多程序使用webview會引發程式崩潰。官方說明 在 android 9 中,為改善應用穩定性和資料完整性,應用無法再讓多個程序共享乙個 webview 資料目錄。如果您的應用必須在多個程序中使用 webview 例項,則您必須先使用webview.set...