2011-12-22 32 views

回答

3

是的,當進程在內核空間被阻塞時,例如讀取被阻止的NFS文件系統或者在沒有響應的設備上。

4

SIGKILL不能被屏蔽或忽略(SIGSTOP也不能)。

如果信號在系統調用「內部」被阻塞,則進程可能無法響應信號(等待I/O就是一個例子 - 等待在沒有intr的情況下硬安裝的失敗NFS文件系統上的I/O選項)。

(另一側的情況是殭屍進程,但他們沒有真正在這一點上處理。)

+0

這是否意味着當用戶應用程序進行系統調用時,它將阻止所有信號,直到該系統調用返回? – Mandar 2011-12-22 07:17:42

+0

它不是「封鎖」,它處於「不間斷睡眠(D)」狀態。請參閱http://stackoverflow.com/questions/767551/how-to-stop-uninterruptible-process-on-linux – 2011-12-22 07:18:57

+1

@Mandar,no。你不能「阻止所有的信號」。 D狀態是內核內部的東西(例如從CD-ROM讀取,同步到磁盤等)。 – 2011-12-22 07:20:11

0

請與ps a(或者可以使用其他標誌以及)過程中的狀態。 如果進程狀態是

D : uninterruptible sleep (usually IO) 

那麼你不能殺死那個進程。
正如其他人提到的那樣,按照定義,這通常是由I/O卡住造成的,例如進程正在等待對斷開連接的NFS文件系統執行I/O操作。