DrawingProcess
드프 DrawingProcess
DrawingProcess
전체 방문자
오늘
어제
«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
  • 분류 전체보기 (964)
    • Profile & Branding (22)
      • Career (15)
    • IT Trends (254)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (19)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (97)
      • Book (66)
      • Lecture (31)
    • Project Process (94)
      • Ideation (0)
      • Study Report (34)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (72)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (2)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (149)
      • AI: Research (1)
      • AI: 2D Vision(Det, Seg, Tra.. (35)
      • AI: 3D Vision (70)
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • 인생을 살면서 (64)
      • 나의 취미들 (7)
      • 나의 생각들 (42)
      • 여행을 떠나자~ (10)
      • 분기별 회고 (5)

개발자 명언

“ 매주 목요일마다 당신이 항상 하던대로 신발끈을 묶으면 신발이 폭발한다고 생각해보라.
컴퓨터를 사용할 때는 이런 일이 항상 일어나는데도 아무도 불평할 생각을 안 한다. ”

- Jef Raskin

맥의 아버지 - 애플컴퓨터의 매킨토시 프로젝트를 주도

인기 글

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
DrawingProcess

드프 DrawingProcess

Study: ComputerScience(CS)/CS: Linux

[Linux] 리눅스 프로세스 프로그래밍: fork() 자식 프로세스 생성하기

2022. 7. 19. 10:41
반응형

프로세스 프로그래밍 (Process Programming)


프로세스 생성과 종료

함수 의미
fork 자신과 완전히 동일한 프로세스를 생성한다.
exec 계열 지정한 실행 파일로부터 프로세스를 생성한다.
exit 종료에 따른 상태 값을 부모 프로세스에게 전달하며 프로세스를 종료한다.
atexit exit로 프로세스를 종료할 때 수행할 함수를 등록한다.
_exit atexit로 등록한 함수를 호출하지 않고 프로세스를 종료한다.
wait 자신의 자식 프로세스가 종료할 때까지 대기 상태가 된다.
waitpid 지정한 자신의 자식 프로세스가 종료할 때까지 대기 상태가 된다.

프로세스 속성과 환경 변수

함수 의미
getpid, getppid 자신(또는 부모)의 프로세스 식별 번호를 구한다.
getpgrp, setpgrp 자신의 프로세스 그룹 식별 번호를 구하거나 변경한다.
getpgid, setpgid 지정한 프로세스의 그룹 식별 번호를 구하거나 변경한다.
getsid 지정한 프로세스의 세션 식별 번호를 구한다.
setsid 현재 프로세스가 새로운 세션을 생성한다.
getenv, putenv 환경 변수의 값을 구하거나, 새로운 환경 변수를 등록/변경 한다.
setenv 새로운 환경 변수를 등록하거나 변경한다.
unsetenv 등록된 환경 변수를 삭제한다.

 

프로세스 생성 함수


fork: 프로세스를 복제하여 완전히 동일한 자식 프로세스 생성

#include <sys/types.h>
#include <unistd.h>

// pid_t 구조체: pid_t fork(void)
pid_t pid = fork();

if (pid > 0) // 부모 프로세스가 수행할 부분
  …
else (pid == 0) // 자식 프로세스가 수행할 부분
  …
else // pid < 0? fork 호출이 실패할 경우
  …

fork를 사용하는 이유

  • 서버는 하나의 서비스 내에서 여러개의 클라이언트를 받아내야 합니다. 그래서 서버의 프로세스가 클라이언트의 요청을 받으면 자신이 응답하는 것이 아니라, 자식을 fork()하여 전달합니다. 간단히 말하면 서버 프로세스가 접속을 받을 때마다 요청을 처리할 프로세스를 만들어 응답하는 것입니다.
  • 이 외에도 멀티 태스킹 운영체제에선 동작중인 프로그램 외에도 다른 프로그램을 동작해야할 때가 있습니다. 이를 위해선 새로운 프로세스를 생성해야하고, 그 방법으로 프로세스 자신을 복제하여 프로그램을 호출합니다.

fork로 프로세스를 생성하면...

  • 생성하는 쪽이 부모(parent), 생성된 프로세스는 자식 (child)
    • 생성된 자식 프로세스는 부모 프로세스의 메모리를 그대로 복사하여 가지게 됩니다.
  • 서로 다른 프로세스이다 -> 서로 다른 PID
    • 자식의 PPID는 부모 프로세스의 PID
  • 실행 상태는 똑같다.
    • fork를 호출하던 시점의 context(실행 상태)를 그대로 물려 받 는다.
      • 프로그램 코드
      • 변수, 레지스터 값
      • 스택의 값 등등
    • fork 이후부터는 각자 자기 길을 간다!

 return: 반환 값

  • fork 호출이 성공하여 자식 프로세스가 만들어지면, 부모 프로세스에서는 자식 프로세스의 프로세스 ID가 반환되고 자식 프로세 스에서는 0을 반환한다.
  • fork 호출이 실패하여 자식 프로세스가 만들어지지 않으면, 부모 프로세스에서는 -1이 반환된다.

 

참고


  • 프로세스 프로그래밍: http://contents.kocw.or.kr/document/09_Process.pdf
  • fork 함수 사용하여 프로세스 생성: https://codetravel.tistory.com/23
  • 프로세스 생성: https://jong-seok-ap.tistory.com/77
  • 리눅스 환경에서 fork함수를 이용한 자식 프로세스 생성하기: https://kim-hoya.tistory.com/7 
  • 프로세스 제어: http://ivis.kr/images/1/10/2018_Unix_ch09.pdf 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Study: ComputerScience(CS) > CS: Linux' 카테고리의 다른 글

[Linux] 리눅스 *.so.* 파일 경로: 동적 라이브러리 링킹하는 방법 (feat. 정적(static) vs 동적(dynamic))  (2) 2022.07.23
[Linux] 리눅스 cURL 명령어: 다양한 프로토콜로 웹 요청 / 원하는 파일을 내려받자.  (0) 2022.07.20
[Linux] 리눅스 네트워크 상태 확인 (feat. ping, netstat...)  (0) 2022.07.19
[Linux] 리눅스 wget vs curl: 웹 서버로부터 컨텐츠를 가져오자!  (0) 2022.07.19
[Linux] 리눅스 사용자 관리 (user@host : 사용자명, 호스트명 변경하기)  (0) 2022.07.19
    'Study: ComputerScience(CS)/CS: Linux' 카테고리의 다른 글
    • [Linux] 리눅스 *.so.* 파일 경로: 동적 라이브러리 링킹하는 방법 (feat. 정적(static) vs 동적(dynamic))
    • [Linux] 리눅스 cURL 명령어: 다양한 프로토콜로 웹 요청 / 원하는 파일을 내려받자.
    • [Linux] 리눅스 네트워크 상태 확인 (feat. ping, netstat...)
    • [Linux] 리눅스 wget vs curl: 웹 서버로부터 컨텐츠를 가져오자!
    DrawingProcess
    DrawingProcess
    과정을 그리자!

    티스토리툴바