시스템 콜 (fork, exec, pipe)

김현송·2023년 5월 11일
0

리눅스

목록 보기
5/7

fork

  • 새로운 프로세스를 생성하는 시스템 콜 입니다.

  • 호출한 프로세스는 부모 프로세스가 되고, 새로 생성된 프로세스는 자식 프로세스가 됩니다.

  • fork() 함수의 반환값으로 부모 프로세스는 자식 프로세스의 PID 값을 받고, 호출을 성공(자식 프로세스가 생성)하면 0을 반환(자식이 받음)합니다.

자식 프로세스는 부모 프로세스의 메모리를 그대로 복사하여 사용합니다.

wait

  • 부모 프로세스가 자식 프로세스의 종료를 기다리는 함수입니다.

setbuf

  • 표준 입출력 함수를 사용할 때 버퍼링 방식을 변경할 수 있는 함수
    setbuf 함수를 사용하여 버퍼링 방식을 변경하면 stdout과 같은 표준 출력 스트립에 출력하는 내용이 바로 화면에 나타날 수 있도록합니다.
#include <stdio.h>

int main() {
    setbuf(stdout, NULL);  // stdout의 출력 버퍼를 0으로 설정
    return 0;
}




exec

  • 새로운 프로그램을 실행하기 위해 현재 프로세스의 메모리 이미지를 새로운 프로그램의 메모리 이미지로 교체하는 함수입니다.(덮어쓰기)
int execl(const char *path, const char *arg, ...);
  • path : 실행하고자 하는 새로운 프로그램의 경로
  • arg : 실행하고자 하는 새로운 프로그램에 전달할 인수




pipe

  • 양방향 통신용 파일 디스크립터 두 개를 생성하는 함수입니다.
  • 파이프 한쪽으로 쓰여진 데이터를 다른 쪽에서 읽어들일 수 있는 구조로 되어 있으며, 일반적으로 부모 프로세스와 자식 프로세스 간의 통신에 많이 사용합니다.
  • pipe 함수를 호출하면 파이프의 읽기용과 쓰기용으로 각각의 fd를 반환하는데, 이 fd를 이용하여 각각 파이프에 데이터를 쓰거나 읽어올 수 있습니다.




구현 및 분석

https://github.com/kimhyunsong/kdt_linux_system

profile
안녕하세요

0개의 댓글