這是對Is a successful send() "atomic"?的後續問題,因爲我認爲它實際上涉及系統調用,而不僅僅是發送套接字。何時以及如何中斷系統調用?
哪些系統調用可以中斷,何時中斷,中斷在哪裏處理?我已經瞭解了SA_RESTART,但並不完全理解正在發生的事情。
如果我做一個系統調用,而不SA_RESTART,可以在呼叫被任何中斷的中斷(例如,用戶輸入)不關心我的應用程序,但需要OS中止我的電話,做一些事情其他?或者它只是被直接關係到我的進程的信號中斷(CTRL + C,socket關閉,...)?
設置SA_RESTART時,send()或其他任何「慢速」系統調用的語義是什麼?它會一直阻塞,直到我的所有數據傳輸或套接字關閉,還是可以返回一個小於send()參數中的計數的數字?
在哪裏重新啓動實施?操作系統是否知道我希望在發生任何中斷時重新啓動呼叫,還是將某些信號發送到我的流程,然後通過庫代碼處理?或者我必須自己做,例如在一個while循環中包裝呼叫並按需要重試?
這隻意味着信號發送到我的過程,對不對?我以某種方式假定任何處理我的中斷的內核中斷(按鍵,鼠標移動,定時器中斷...)都會導致我的調用返回併發送信號。 系統調用期間的上下文切換不應以除時間之外的任何方式干擾我的進程,對吧? – lxgr
@lxgr,這是正確的,上下文切換不會中止系統調用。 –