yongsa0221의 고물상
프로세스 API 본문
프로세스 API란?
프로세스 API를 통해 사용자 애플리케이션이 운영 체제의 기능을 이용할 수 있도록 인터페이스를 제공하며, 이러한 인터페이스를 통해 커널에 요청을 전달한다. 이후 커널은 실제로 프로세스 생성, 제어, 종료 등의 작업을 수행한다. 프로세스 API는 system call 의 wrapper 함수들로 구성되어 있다.
프로세스 API는 사용자가 쉽게 system call을 사용할 수 있도록 추상화된 인터페이스를 제공한다. 프로세스 API를 사용하면 복잡한 시스템 콜의 직접적인 사용을 피할 수 있으며, 더 쉽게 프로세스를 관리할 수 있다.
아래의 코드는 모두 shell에서 “ls” 명령을 수행하는 프로그램이다.
System Call 사용
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
pid_t pid = fork(); // 시스템 콜
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// 자식 프로세스
execlp("ls", "ls", NULL); // 시스템 콜
perror("execlp");
exit(EXIT_FAILURE);
} else {
// 부모 프로세스
wait(NULL); // 시스템 콜
printf("Child process completed\\n");
}
return 0;
}
프로세스 API 사용
#include <stdlib.h>
#include <stdio.h>
int main() {
int status = system("ls"); // 프로세스 API 사용
if (status == -1) {
perror("system");
exit(EXIT_FAILURE);
}
printf("Command executed with status: %d\\n", status);
return 0;
}
system.c source code [glibc/stdlib/system.c] - Codebrowser
system.c source code [glibc/stdlib/system.c] - Codebrowser
9 The GNU C Library is distributed in the hope that it will be useful,
codebrowser.dev
위의 사이트에서 라이브러리 코드를 볼 수 있다.
API 제공 기능
프로세스 API는 운영체제 마다 다르지만 기본적으로 다음과 같은 기능을 제공한다
프로세스 생성 및 실행:
- fork() 및 exec() (유닉스/리눅스), CreateProcess() (윈도우)
프로세스 종료:
- exit() (유닉스/리눅스), TerminateProcess() (윈도우)
프로세스 상태 확인:
- wait() 및 waitpid() (유닉스/리눅스), GetExitCodeProcess() (윈도우)
프로세스 간 통신 (IPC):
- 프로세스 간의 통신을 위한 메커니즘을 제공
- 파이프, 메시지 큐, 공유 메모리, 소켓 등
프로세스 정보 조회:
- 현재 실행 중인 프로세스의 정보 (예: PID, 실행 시간, 메모리 사용량 등)를 조회
예: /proc 파일 시스템 (유닉스/리눅스), GetProcessInformation() (윈도우)
프로세스 우선순위 제어:
- nice() 및 renice() (유닉스/리눅스), SetPriorityClass() (윈도우)