Linux 커널에서 직접 프로세스 정보를 쿼리할 수 있습니까?

Linux 커널에서 직접 프로세스 정보를 쿼리할 수 있습니까?

나는 알고 pgrep있으며 모든 쿼리 파일 시스템을 알고 top있습니다 . 여태까지는 그런대로 잘됐다. 하지만 제가 생각하게 된 것은 예전에는 파일 시스템이 없었다는 것입니다 . 내가 아는 한, 지금도 Mac OS X에는 파일 시스템이 없지만 여전히 프로세스 정보에 접근하므로 이 정보는 커널에서 직접 가져와야 합니다. 그러나 내 질문은 Linux에만 해당됩니다. 프로세스 정보에 대한 직접 쿼리를 우회하기 위해 어떤 라이브러리 및/또는 시스템 호출을 사용할 수 있습니까 ?ps/proc/proc/proctop/proc

답변1

프로세스 정보는 Linux 커널에서 직접 쿼리할 수 있습니다 /proc. 이는 Linux, Solaris 및 기타 여러 Unix 변형에서 수행되는 방식입니다.

고대 Unix 시스템에는 pssetuid 루트 명령이 있었고 일부 커널 메모리를 매핑했습니다(경로를 통해)./dev/kmem또는 유사) 및 구문 분석된 커널 데이터 구조. 이를 위해서는 ps권한이 있어야 하고(위험함) 정확한 커널 버전에 묶여 있어야 합니다(불편함).

최신 *BSD 시스템에서는 ps다음을 호출하여sysctl함수는 이진 형식으로 정의된 구조로 형식화된 정보를 검색하기 위해 시스템 호출을 수행합니다. MacOS도 동일한 메커니즘을 사용합니다.

Linux에는 이 BSD 인터페이스가 없습니다. procfs 및 sysfs를 사용하여 사용자 모드가 커널에서 정보를 검색할 수 있도록 합니다. BSD는 특수 시스템 호출로 검색되는 바이너리 형식으로 정보를 마샬링하는 반면, Linux는 특수 파일 시스템에 대한 일반 파일 액세스를 통해 검색되는 문자열로 정보를 마샬링합니다. 고대 Unix 시스템에서와 동일한 접근 방식을 사용하는 것이 가능하지만 열등한 접근 방식(권한이 필요하고 변경 시 커널 데이터 구조를 업데이트해야 함)이기 때문에 아무도 그렇게 하지 않습니다.

답변2

/proc 파일 시스템이 존재하기 전에 psutils는 /dev/kmem(커널 메모리 의사 장치)에서 직접 정보를 읽었습니다. 명백하게 ps의 특정 버전만이 주어진 커널 버전에서 작동할 것입니다. 이는 /proc를 선호하는 주장입니다. (사람이 쉽게 읽을 수 있고 Perl 스크립트와 같은 커널 구조에 더 쉽게 접근할 수 있다는 점은 틀림없이 더 큰 이점입니다.)

관련 정보