프로세스는 언제 "D" 상태에 들어가나요?

프로세스는 언제 "D" 상태에 들어가나요?

저는 "Linux 호스트 이름 2.6.28-15-generic #49-Ubuntu SMP Tue Aug 18 18:40:08 UTC 2009 i686 GNU/Linux"를 사용하고 있습니다.

모든 클라이언트 컴퓨터는 씬 클라이언트를 사용할 것이며 저는 업무용으로 랩톱을 사용할 것이며 서버에서 랩톱으로 홈 디렉터리를 마운트할 것입니다.

노트북에서 Firefox를 열면 프로세스가 "D" 상태이고 다른 모든 사용자 컴퓨터가 정지되고 lockd 프로세스가 "D" 상태이기 때문에 Firefox 창이 열리지 않습니다.

추신: 파이어폭스 |

1  6187  4313  4313 ?   -1 D<    1030   3:16 /usr/lib/firefox-3.5b4pre/firefox-3.5

   7610  7622  7621  7610 pts/3      7621 S+    1030   0:00 grep firefox

시스템 로그를 확인해보면

7월 13일 10:35:56 호스트 이름 커널: [222583.872059] lockd: 노트북을 모니터링할 수 없습니다.

7월 13일 10:35:57 호스트 이름 커널: [222583.872059] lockd: 노트북을 모니터링할 수 없습니다.

PS ajx grep 잠금 |

루트9178 0.0 0.0 0 0? D< 13:35 0:00 [잠김]

root11039 0.0 0.0 3340 796 포인트/3 S<+ 14:18 0:00 grep lockd

모든 클라이언트 컴퓨터에는 동일한 메시지가 있습니다.

프로세스는 언제 "D" 상태에 들어가나요?

lockd 프로세스는 언제 "D" 상태에 들어가나요?

lockd 프로세스의 목적은 무엇입니까?

답변1

"끊임없는 잠"을 의미.

D    Uninterruptible sleep (usually IO)

이 상태에서는 프로세스가 신호를 처리하기 위해 즉시 깨어나지 않습니다. 이것이 장치를 다룰 때 I/O취할 수 있는 유일한 방법입니다 (그렇지 않으면 데이터가 손상될 수 있습니다).

답변2

D상태코드는 프로세스가 진행 중임을 나타냅니다.방해받지 않는 수면.

  • 일반적으로 이는 I/O로 인해 발생합니다.
  • lockdNFS 잠금을 관리하는 커널 데몬입니다.

문제는 NFS 통신과 관련이 있을 수 있습니다.

답변3

다른 답변의 내용에도 불구하고 D 상태가 반드시 작업이 중단되지 않음을 의미하는 것은 아닙니다. 예를 들어, 많은 D 상태 프로세스는 터미널 신호를 수신할 때 실제로 종료됩니다. 테스트의 몇 가지 예를 읽을 수 있습니다.본문에서.

Linux에서는 TASK_KILLABLE플래그를 설정하여 많은 D 상태가 입력됩니다.

linux % git grep -ihc _killable | paste -sd+ | bc
539

TASK_KILLABLE신호 상호 작용으로부터 프로세스를 보호해야 하는 경우가 있는 반면 더 이상 사용자 공간 명령을 실행하지 않고 프로세스가 종료된다는 사실만 알아야 하는 경우가 있기 때문에 생성되었습니다. 예를 들어 DMA가 수행되지 않는 D 상태(예: vfork())에서는 불안전한 작동 조건을 방지하기 위해 차단해야 하지만 다음 작업을 수행하려는 경우 계속해서 기다릴 이유가 없습니다. 종료 - 이는 시간과 프로세스의 낭비입니다.

완전히 중단할 수 없는 대신 TASK_KILLABLE신호를 받으면 신호가 치명적인지(즉, 잡을 수 없는 치명적인 신호인지 또는 프로그램에 기본 터미널 구성 핸들러를 사용하여 신호에 대한 사용자 공간이 없는지) 확인합니다. 더 이상 사용자 공간 명령을 실행하지 못하도록 프로세스를 종료합니다.

D 상태 프로세스는 추가 사용자 공간 명령을 실행할 수 없는 프로세스를 나타내지만 모든 신호를 차단하는 것은 이를 달성하는 방법에 대한 하나의 설명일 뿐이며 모든 경우에 필요한 것은 아닙니다.

관련 정보