VirtualBox 6.0에서 CentOS 8(3.10)을 실행하고 있습니다... WCHAN에 대해 2가지 질문이 있습니다
"ps" 매뉴얼 페이지에서는 WCHAN을 다음과 같이 설명합니다.
Blockquote nwchan 프로세스가 휴면 중인 커널 함수의 WCHAN 주소입니다(커널 함수 이름이 필요한 경우 wchan 사용). 실행 중인 작업은 이 열에 대시("-")를 표시합니다.
Blockquote wchan 프로세스가 휴면 중인 커널 함수의 WCHAN 이름, 프로세스가 실행 중인 경우 "-", 프로세스가 다중 스레드이고 ps가 스레드를 표시하지 않는 경우 "*".
아직 "*"를 본 적이 없지만 "ps" 명령의 출력에 "?"가 정기적으로 나타나는 것을 볼 수 있습니다. 일반적으로 rcu_sched 커널 프로세스와 연관되어 있지만 "?"는 다른 프로세스에 나타납니다. "?"에 대한 정의를 찾지 못했습니다...무슨 뜻인가요?
두 번째 질문은 "ps" 명령의 출력과 "시스템 모니터" GUI 유틸리티 사이에 나타나는 차이점에 관한 것입니다. "ps" 명령을 실행하면 여러 프로세스가 실행되고 WCHAN 아래에 "-"가 표시됩니다. 그러나 시스템 모니터에서는 동일한 프로세스가 WCHAN 코드 "poll_schedule_timeout"을 사용하여 실행됩니다. 내가 읽은 바에 따르면 이는 프로세스가 I/O를 기다리고 있음을 나타냅니다. 이 프로세스는 잠자기 상태가 아니어야 합니까?
답변1
"ps" 출력의 물음표 "?"
Linux에서는 "ps"의 소스 코드를 확인하지 않았지만 IMHO "?"는 "ps"에 값을 알 수 없는 경우 항상 사용됩니다.왜자세한 내용을 모르면 답변을 드릴 수 없는 경우가 있습니다.
그러나 가장 일반적인 이유는 권한이 부족하기 때문입니다. "ps" 프로세스의 사용자는 다른 프로세스의 세부 정보를 읽을 수 있는 권한이 없습니다. 다른 프로세스의 세부사항은 예를 들어 디렉토리에서 확인할 수 있습니다 /proc/PIDNUMBER/
. 세부사항을 볼 수 있는 권한이 없으면 시작한 "ps" 프로세스에도 동일한 권한 문제가 발생합니다.
"ps"와 "system monitor"의 출력이 다릅니다.
안타깝게도 이에 대해서는 정확하게 답변할 수 없습니다. 사실, 난 할 수있어언제나"ps", "시스템 모니터" 또는 기타 도구의 두 인스턴스가 서로 다른 출력을 표시할 것으로 예상됩니다.현재의프로세스 상태. 시스템에 있는 대부분의 프로세스 상태가 매초 변경되기 때문입니다! "ps"와 같은 도구를 실행할 때마다 해당 순간의 상태에 대한 스냅샷을 얻을 수 있습니다.
두 개의 "ps" 인스턴스를 동시에 실행하려고 해도 "ps" 자체는 Linux/Unix 커널에서 일부 시간 조각을 가져오는 프로세스일 뿐이므로 거의 모든 시스템에서 출력이 달라집니다. ps" "프로세스는 서로 다른 시간에 다른 프로세스로부터 데이터를 가져오므로 서로 다른 값을 얻습니다.
이론적으로 시스템에 200개의 CPU 코어가 있고 198개의 프로세스만 있는 경우 두 개의 (새로운) "ps" 프로세스가 있습니다.할 수 있다동일한 출력을 보여줍니다. 이론적으로는 두 프로세스가 모두 자체 CPU 코어에서 실행되고 동시에 시작된 경우입니다!
테스트 출력:
일반적으로 프로세스 상태는 자주 전환됩니다. 일정 시간 동안 유지될 수 있는 유일한 상태는 "Stop"입니다. 이는 "ps"에서 "T"(sTopped)로 표시됩니다. 여기서 "ps"와 "시스템 모니터"를 비교하려면 프로세스에 중지 신호를 보낸 다음 kill -STOP PIDNUMBER
해당 프로세스에 대한 두 도구의 출력을 비교할 수 있습니다. 비교 후 프로세스를 계속하려면 를 사용하여 "계속" 신호를 보내면 됩니다 kill -CONT PIDNUMBER
. 프로세스로서 "ps" 출력(또는 "grep" ped)에서 쉽게 찾을 수 있는 "sleep 3600"과 같은 것을 사용할 수 있습니다.