저는 "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로 인해 발생합니다.
lockd
NFS 잠금을 관리하는 커널 데몬입니다.
문제는 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 상태 프로세스는 추가 사용자 공간 명령을 실행할 수 없는 프로세스를 나타내지만 모든 신호를 차단하는 것은 이를 달성하는 방법에 대한 하나의 설명일 뿐이며 모든 경우에 필요한 것은 아닙니다.