![시스템 호출만 사용하여 프로세스 활동 모니터링("top"과 같은 유틸리티는 사용하지 않음)](https://linux55.com/image/1298/%EC%8B%9C%EC%8A%A4%ED%85%9C%20%ED%98%B8%EC%B6%9C%EB%A7%8C%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%ED%99%9C%EB%8F%99%20%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81(%22top%22%EA%B3%BC%20%EA%B0%99%EC%9D%80%20%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0%EB%8A%94%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80%20%EC%95%8A%EC%9D%8C).png)
Linux 시스템 호출을 사용하여 다양한 사용자가 사용하는 메모리와 사용자가 실행하는 다양한 프로세스에 대한 정보뿐만 아니라 메모리 소비, 실행 속도 등과 같은 이러한 프로세스에 대한 통계를 얻고 싶습니다.
와 같은 명령을 사용하고 싶지 않습니다 free
. top
누구든지 이 작업을 수행하는 방법을 제안할 수 있습니까?
답변1
메모리가 어떻게 사용되는지 이해하는 것이 중요합니다. 일반적으로 메모리의 많은 부분이 공유됩니다. 프로그램과 해당 라이브러리에 사용되는 모든 코드는 서로 다른 프로세스 간에 공유됩니다. 코드는 읽기 전용 메모리에 매핑되고 모든 프로세스에서 공유되므로 어느 한 사용자에게 속하지 않습니다. 일부 라이브러리는 libc
거의 모든 프로세스에서 사용되지만 RAM에는 한 번만 로드됩니다. 코드가 많은 프로그램은 데이터가 많은 프로그램보다 공유 메모리가 더 많습니다.
귀하의 질문에 대답하자면, top, free, ps와 같은 프로그램에서 얻은 거의 모든 정보는 /proc
파일 시스템을 검색하여 얻은 것입니다. 각 프로세스에는 해당 PID로 명명된 자체 폴더가 있습니다. 메모리 매핑을 보여주는 맵, 프로세스를 시작하여 실행되는 명령을 보여주는 comm, I/O 사용량을 보여주는 io 등 많은 파일이 있습니다. /proc
안에 소개가 있어요리눅스 커널 문서.
답변2
다음 방법을 이용하시면 될 것 같습니다. 나는 예를 보여주고 있습니다 :
내 Linux Box에서 실행되는 Firefox 브라우저에 대해 알아야 할 사항이 있다고 생각해보세요. 나는 다음 단계를 따를 것입니다 :
- Firefox의 PID를 가져옵니다.
[shubham@system-dev ~]$ ps -aux | grep firefox Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ shubham 24790 17.5 25.8 1679220 1038440 ? Sl 09:15 26:02 /usr/lib/firefox/firefox
이제 "PID"와 함께 /proc FS를 사용하여 다양한 정보를 확인합니다(내 Linux 시스템의 Firefox 예는 아래에 나와 있습니다).
[shubham@system-dev ~]$ cat /proc/24790/status Name: firefox State: S (sleeping) Tgid: 24790 Pid: 24790 PPid: 29843 TracerPid: 0 Uid: 501 501 501 501 Gid: 0 0 0 0 Utrace: 0 FDSize: 256 Groups: 0 VmPeak: 1682804 kB VmSize: 1679412 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 1183048 kB VmRSS: 1040800 kB VmData: 1453848 kB VmStk: 152 kB VmExe: 64 kB VmLib: 61296 kB VmPTE: 2828 kB VmSwap: 147048 kB Threads: 24 SigQ: 1/31287 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000001001000 SigCgt: 00000001800044ef CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff Cpus_allowed: f Cpus_allowed_list: 0-3 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 2604819 nonvoluntary_ctxt_switches: 560691
모니터링을 위해 /proc// 디렉터리에 있는 많은 파일을 사용할 수 있습니다(예: mem, io, stat.stack 등).
참고: 시스템 호출과 함께만 사용하는 경우 open(), creat(), close(), read() 등의 시스템 호출이 필요합니다.
내 대답을 이해하시기 바랍니다!