프로세스가 상태에 들어가면 D
중단할 수 없는 상태라는 것을 알고 있습니다. 어떤 신호로도 프로세스를 종료할 수 없습니다. 재부팅 시 또는 I/O 대기가 끝난 경우에만 해당 상태가 해제됩니다.
D
내 컴퓨터에 문제가 있음을 보여주는 상태 의 프로세스가 많이 있습니다 . 또한 재부팅 후에도 상태로 돌아갑니다 D
. 온라인으로 검색한 결과 wchan
ps 출력의 해당 섹션이 내 프로세스가 커널에서 무엇을 기다리고 있는지 알려줍니다.
이 명령을 사용할 때 wchan 열에 ps axl| grep D
들어가고 있는데 -
이것이 무엇을 의미하는지 온라인에는 설명이 없습니다.
이것은 위 명령에 대한 샘플 출력입니다.
0 0 69970 1 20 0 25064 1088 - D ? 0:00 ls -l
-
위 출력의 의미 를 이해할 수 없습니다 .
답변1
-
wchan이 다음과 같이 보고되는 데에는 몇 가지 이유가 있을 수 있습니다 ps
.
- 프로세스가 커널에서 차단되지 않았습니다. 즉, 실행 중입니다(ps
state
열 참조). - 그만큼스택워킹 절차일부 코너 케이스 또는 경쟁 조건으로 인해 실패합니다. 예를 들어 적절한 프레임 포인터 설정이 필요하지만 설정 없이 컴파일된 커널에서는 무조건 실패할 수도 있습니다.
cat /proc/*/wchan
- 모든 0 출력이 wchan 지원이 중단되었음을 나타냅니다(예: 현재의 경우).페도라 31 및 32) - 너가지고 있지 않다필요한ptrace 액세스 모드 권한(즉
PTRACE_MODE_READ_FSCREDS
) - 가능성 없음 - 그만큼기호 조회가 실패합니다.커널에서 - 가능성 없음
최신 버전에서는 더 쉬운 테스트를 위해 직접 액세스할 수 있는 ps
wchan 정보 도 읽을 수 있습니다. wchan 정보 검색이 실패하면 해당 파일을 읽습니다 . 이는 ./proc/$pid/wchan
cat
0
ps
-
손상된 시스템에서 wchan
대체 방법은 다음을 살펴보는 것입니다(루트 필요).
cat /proc/$pid/stack
또는 다음과 같이 문의하십시오(루트 권한이 필요하지 않음).
cat /proc/$pid/syscall
답변2
최신 Linux 커널에서는 프로세스가 어떤 커널 기능에 멈췄는지 확인할 수 있습니다.
cat /proc/<pid_numer>/stack
답변3
ps의 매뉴얼 페이지에는 이 정보가 있습니다. "-"는 프로세스가 실행 중임을 의미합니다. 프로세스가 휴면 중인 커널 함수의 WCHAN 이름, 프로세스가 실행 중이면 "-", 프로세스가 다중 스레드이고 ps가 스레드를 표시하지 않는 경우 "*"입니다.