RealtimeMemTracker - 2, 현재 실행중인 프로세스 확인

2025. 3. 23. 02:42·C프로그래밍/MemoryTracker

프로세스의 메모리의 관리하기 위해선, 먼저 현재 실행 중인 프로세스 목록을 알아야한다.

리눅스에서는 현재 실행중인 프로세스들의 정보가 /proc 디렉토리에 저장된다.

 

/proc 디렉토리에는 숫자로 된 이름의 디렉토리가 존재하는데, 이는 각각의 PID를 의미한다.

예를 들어, /proc/2456은 PID가 2456인 프로세스에 대한 정보를 담고있다.

 

struct dirent { /* when _DARWIN_FEATURE_64_BIT_INODE is NOT defined */
             ino_t      d_ino;                /* file number of entry */
             __uint16_t d_reclen;             /* length of this record */
             __uint8_t  d_type;               /* file type, see below */
             __uint8_t  d_namlen;             /* length of string in d_name */
             char    d_name[255 + 1];   /* name must be no longer than this */
     };

(dirent 구조체 필드)

 

/*
      * File types
      */
     #define DT_UNKNOWN       0
     #define DT_FIFO          1
     #define DT_CHR           2
     #define DT_DIR           4
     #define DT_BLK           6
     #define DT_REG           8
     #define DT_LNK          10
     #define DT_SOCK         12
     #define DT_WHT          14

 

 

디렉토리 타입은 DT_DIR로 확인한다.

즉, /proc을 순회하면서, 디렉토리 타입이 DT_DIR인 항목 중에서,

d_name(디렉토리 이름)이 숫자로만 이루어진 항목을 atoi로 정수형 PID로 변환하여 출력하면 된다.

 

#include <stdio.h>
#include <stdlib.h>
#include <sys/ptrace.h>
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>

void monitor_all_process()
{
	DIR *dir = opendir("/proc"); //proc dir열고
	if(dir == NULL)
	{
		perror("opendir error");
		exit(1);
	}

	struct dirent *all_process;
	
	while((all_process = readdir(dir)) != NULL) //proc dir 순회
	{
		if(all_process->d_type == DT_DIR) //DT_DIR이면 즉, 디렉토리면
		{
			pid_t pid = atoi(all_process->d_name); //정수형으로 바꾸고
			if(pid > 0)
			{
				printf("[Monitor] PID : %d\n", pid); //출력
			}
		}
	}
	closedir(dir);
}

int main()
{
	while(1)
	{
		system("clear");
		monitor_all_process();
		sleep(1);
	}

	return 0;
}

 

일단 프로세스 목록을 출력하는 것 까지는 했고,

이 코드에서 프로세스 목록 데이터를 다른 코드로 전달하는 부분은 다시 수정해서 작성해야할 듯 하다.

 

(하지만, 프로세스 정보가 /proc디렉토리에 전달되는거는 linux한정이다..

즉, 윈도우, mac에서는 이 방식으로 프로세스 정보를 가져올 수 없다.)

'C프로그래밍 > MemoryTracker' 카테고리의 다른 글

RealtimeMemTracker - 개발 재개..  (0) 2025.06.24
RealtimeMemTracker - 4, ARM64 Linux에서 PTRACE_SYSCALL을 사용한 시스템 콜 트레이싱  (5) 2025.03.25
RealtimeMemTracker - 3, 시스템콜 번호 확인하기  (1) 2025.03.23
RealtimeMemTracker - 1, 다른 프로세스의 SystemCall 추적하기  (0) 2025.03.20
'C프로그래밍/MemoryTracker' 카테고리의 다른 글
  • RealtimeMemTracker - 개발 재개..
  • RealtimeMemTracker - 4, ARM64 Linux에서 PTRACE_SYSCALL을 사용한 시스템 콜 트레이싱
  • RealtimeMemTracker - 3, 시스템콜 번호 확인하기
  • RealtimeMemTracker - 1, 다른 프로세스의 SystemCall 추적하기
Minu Jin
Minu Jin
정보의 바다
  • Minu Jin
    뇌 구조가 바이너리
    Minu Jin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    시스템콜
    C++
    포인터
    INIT
    rubikpi3
    Branch
    피보나치
    순환
    자료구조
    동적메모리
    리눅스
    커널
    Qualcomm
    파이썬
    이진 트리
    yolo
    커널 기여
    c언어
    앤드류모튼
    소수
    Git
    드라이버 분석
    스택
    commit
    arm
    파일 입출력
    토발즈
    백준
    버퍼
    rubik pi
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minu Jin
RealtimeMemTracker - 2, 현재 실행중인 프로세스 확인
상단으로

티스토리툴바