시스템 프로그래밍[4-9]

Turtle·2024년 5월 5일
0
post-thumbnail

❓프로세스

  • 프로세스는 CPU와 메모리를 할당받아 실행시키는 프로그램을 말한다.
  • 프로세스들마다 고유의 프로세스 ID(PID)를 할당받는다.
    • 가장 먼저 실행되는 프로세스는 init이다. init의 PID 값은 1이다.
    • 프로세스 init에 의해 다른 모든 프로세스들이 시작된다.

❓프로세스 생성

  • 부모 프로세스가 자식 프로세스를 생성하는데 이 때, 사용하는 명령어가 바로 fork()이다.
  • 새로운 프로세스를 만들 때 기존 프로세스를 복제하는 방식을 사용한다.
  • 새로운 프로세스를 위한 메모리를 할당한다.
  • 새로 생성된 프로세스는 원래의 프로세스와 동일한 구조를 가지고 있다.
  • 원본 프로세스를 부모 프로세스, 새로 복제된 프로세스를 자식 프로세스라고 한다.
  • fork() 시스템 호출을 통한 리턴값을 통해 부모 프로세스인지 자식 프로세스인지를 구별할 수 있다.
  • fork() 시스템 호출 후에 리턴값이 다른 것을 확인할 수 있다. 이 리턴값을 이용하여 부모 프로세스와 자식 프로세스를 구별할 수 있는데 이 때 pid 즉, 프로세스 ID 값이 0이면 자식 프로세스라는 의미이고 프로세스 ID 값이 0이 아닌 다른 값이면 부모 프로세스라는 의미가 된다.

[실습 코드1]

#include <stdio.h>
#include <unistd.h>

int main()	{
	int pid;
	printf("[%d] 프로세스 시작 \n", getpid());
	pid = fork();
	printf("[%d] 프로세스 : 리턴값 [%d]\n", getpid(), pid);
}

[실습 결과1]

❓프로세스 그룹

  • 프로세스 그룹은 여러 프로세스들의 집합이다.
  • 보통 부모 프로세스가 생성하는 자손 프로세스들은 부모 프로세스와 같은 그룹에 속한다.
  • 프로세스 그룹을 구성하는 프로세스 중 하나가 그룹의 리더가 되고 프로세스 그룹 리더의 PID가 PGID가 된다.
  • 각 프로세스는 자신이 속한 프로세스 그룹 ID를 가지며 fork() 시스템 호출 시 물려받는다.

[실습 코드2]

#include <stdio.h>
#include <unistd.h>

int main() {
    int pid, gid;
    printf("PARENT : PID = %d GID = %d\n", getpid(), getpgrp());
    pid = fork();
    // pid값이 0이면? -> 자식 프로세스
    if (pid == 0) {
    	printf("CHILD : PID = %d GID = %d\n", getpid(), getpgrp());
    }
}

[실습 결과2]

0개의 댓글