대충 루트기준으로 proc폴더를 알긴 했는데,
프로세스를 직접 출력하는 프로그램을 제작하다보니
자세히 알게 되었음.
=====================================
#include <stdio.h>
#include <stdlib.h>
void get_process_name_by_pid(int pid) {
char path[256];
FILE *fp;
char name[256];
// /proc/[pid]/comm 경로 생성
snprintf(path, sizeof(path), "/proc/%d/comm", pid);
fp = fopen(path, "r");
if (fp == NULL) {
perror("fopen");
return;
}
// 프로세스 이름 읽기
if (fgets(name, sizeof(name), fp) != NULL) {
printf("Process name for PID %d: %s", pid, name); // 이름 출력
} else {
printf("Could not read the process name for PID %d\n", pid);
}
fclose(fp);
}
int main(void) {
int pid = 1234; // 특정 PID를 입력
get_process_name_by_pid(pid);
return 0;
}
=========================================
이렇게 ps를 쓰기만 하다가 특정 프로세스를 출력하는 프로젝트를 진행하고 있는데
proc안에 숫자들이 pid이며 동적으로 프로세스 아이디들이 생성되고
삭제된다는 걸 알았음... ㅎㅎ
/proc는 가상 파일 시스템이며 리눅스에서 실행 중인 프로세스와 커널 정보를
제공하는 특별한 디렉토리임.
실제로 디스크에 존재하는 파일이 아니라 커널과 상호작용함.
/proc의 주요 역할은
프로세스 정보, 각 프로세스에 대한 상세 정보를 담고 있음.
예를 들어, /proc/[pid] 디렉토리는 특정 PID,
시스템의 현재 상태, 하드웨어 정보, 커널 매개변수 등 다양한 시스템 정보를 제공함.
리눅스 API인 Posix-C를 배웠는데 여기서 써먹힘 ㅎㅎ
ls, find, getuid, chmod와 같은 명령어를 직접 프로그래밍해서 만들었음 ㅋㅋ |