Linux
對使用 SIGSTOP 停止的服務的請求會發生什麼情況
如果您向 Web 伺服器發送 SIGSTOP,核心是否只是告訴網路堆棧阻止/休眠與該伺服器套接字的所有連接,直到它繼續?似乎伺服器超時值無關緊要;它會無限期地等待,但如何?
請求會無限期地坐在套接字緩衝區中嗎?如果 Web 伺服器收到大量請求怎麼辦?當套接字緩衝區填滿時會發生什麼?
從系統的任何不關心程序狀態和統計資訊的部分的角度來看,停止的程序(即在收到 SIGCONT 之前不會被調度)與正在執行的程序無法區分,但是不響應特定查詢。例如,無論程序是否停止,或正在工作(使用 CPU 時間)但未進行任何系統呼叫,或在某些未被網路發起方解除阻塞的系統呼叫中被阻塞,網路堆棧都以相同的方式執行事件(例如等待從管道讀取)等。
當程序停止時,程序中沒有超時之類的東西。網路堆棧中通常也沒有超時:機器已經接收到數據包,即使它還沒有到達機器。就例如 TCP 傳輸而言,數據包已被接收,由應用程序來響應。
如果套接字的緩衝區填滿,網路堆棧將開始丟棄數據包。
網路堆棧的行為沒有理由依賴於程序的狀態。程序可以隨時退出停止狀態。可能有多個程序在偵聽一個套接字,因此任何基於程序狀態的決定都必須考慮所有這些。