I read: 只有當接收進程從內核模式返回到用戶模式時,才處理信號。 但這對我來說毫無意義,為什么? 理論上,假設進程A正在運行,它向進程B發送了一個信號,當進程B開始運行時,它可能永遠不會在內核模式下運行那些永遠看不到信號并處理它的人。 但是,在現實世界中,信號幾乎是即時處理的(至少從我自己的觀察來看),這怎么可能,因為我看到了一個明顯的矛盾?
理論上,假設進程A正在運行,它向進程B發送了一個信號,當進程B開始運行時,它可能永遠不會在內核模式下運行那些永遠看不到信號并處理它的人。 Linux是一種搶占式多任務操作系統。這意味著內核給每個進程一個時間片,CPU將以固定的時間間隔接收一個硬件中斷,該中斷將返回到kernel-mode,這樣內核就可以給不同的進程一個時間片。 因此,您所描述的情況(進程將永遠在user-mode中運行,并且永遠不會到達kernel-mode)永遠不會出現在諸如Linux這樣的搶占式多任務操作系統中。
Linux是一種搶占式多任務操作系統。這意味著內核給每個進程一個時間片,CPU將以固定的時間間隔接收一個硬件中斷,該中斷將返回到kernel-mode,這樣內核就可以給不同的進程一個時間片。
因此,您所描述的情況(進程將永遠在user-mode中運行,并且永遠不會到達kernel-mode)永遠不會出現在諸如Linux這樣的搶占式多任務操作系統中。