프로세스 생성과 관리

2024. 9. 17. 23:16Linux*security

반응형
#include <stdio.h>   // 헤더 파일 수정
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

int main(void)
{
    pid_t pid;

    switch (pid = fork()) {
        case -1:
            perror("fork");  // fork 실패 시 오류 메시지 출력
            break;
        case 0:  // 자식 프로세스
            printf("CHILD PROCESS %d\n", getpid());
            sleep(3);
            system("echo CHILD");
            system("ps -l");  // 'ps -1'는 잘못된 옵션, 'ps -l'로 수정
            exit(0);  // 자식 프로세스 종료
            break;
        default:  // 부모 프로세스
            printf("PARENT PROCESS %d\n", getpid());
            printf("Return Value of fork %d\n\n", pid);
            sleep(7);
            system("echo PARENT");
            system("ps -l");  // 'ps -1'는 잘못된 옵션, 'ps -l'로 수정
            break;
    }

    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

 

  • stdio.h: 표준 입출력 함수 사용.
  • stdlib.h: 표준 라이브러리 함수 사용 (예: exit).
  • unistd.h: POSIX 운영 체제 API를 사용 (예: fork, sleep).
  • sys/types.h: 데이터 유형 정의 (예: pid_t).
int main(void)
{
    pid_t pid;

 

 

  • main 함수: 프로그램의 시작 지점.
  • pid_t pid: 프로세스 ID를 저장하기 위한 변수.
    switch (pid = fork()) {
        case -1:
            perror("fork");  // fork 실패 시 오류 메시지 출력
            break;

 

 

  • fork() 함수 호출: 새로운 프로세스를 생성한다. 자식 프로세스는 부모 프로세스의 복사본이다.
  • pid = fork(): fork()의 반환값을 pid에 저장한다.
    • -1: fork() 호출이 실패했음을 나타낸다. perror("fork")를 사용하여 오류 메시지를 출력한다.
        case 0:  // 자식 프로세스
            printf("CHILD PROCESS %d\n", getpid());
            sleep(3);
            system("echo CHILD");
            system("ps -l");  // 프로세스 상태 출력
            exit(0);  // 자식 프로세스 종료
            break;

 

case 0: 자식 프로세스에서 실행되는 코드.

  • printf("CHILD PROCESS %d\n", getpid()): 자식 프로세스의 ID를 출력한다.
  • sleep(3): 3초 동안 대기한다.
  • system("echo CHILD"): "CHILD"라는 문자열을 출력한다.
  • system("ps -l"): 현재 프로세스 상태를 출력한다.
  • exit(0): 자식 프로세스를 종료한다.
        default:  // 부모 프로세스
            printf("PARENT PROCESS %d\n", getpid());
            printf("Return Value of fork %d\n\n", pid);
            sleep(7);
            system("echo PARENT");
            system("ps -l");  // 프로세스 상태 출력
            break;
    }

    return 0;
}
  • default: 부모 프로세스에서 실행되는 코드.
    • printf("PARENT PROCESS %d\n", getpid()): 부모 프로세스의 ID를 출력한다.
    • printf("Return Value of fork %d\n\n", pid): fork()의 반환값 (자식 프로세스의 PID)을 출력한다.
    • sleep(7): 7초 동안 대기한다.
    • system("echo PARENT"): "PARENT"라는 문자열을 출력한다.
    • system("ps -l"): 현재 프로세스 상태를 출력한다.
반응형