3 min read

OSTEP 05 Process API

Table of Contents

1. fork() μ‹œμŠ€ν…œ 콜

OSTEP 05 Process API-1687712682168.jpeg

ν˜„μž¬ 싀행쀑인 ν”„λ‘œμ„ΈμŠ€μ˜ 볡사본을 μƒμ„±ν•œλ‹€. μš΄μ˜μ²΄μ œκ°€ μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜κ³  이 μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λŠ” 원본 ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ 곡간을 λ³΅μ‚¬ν•˜μ—¬ κ°€μ§€κ²Œ λœλ‹€.

λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ—λŠ” μƒˆλ‘œ μƒμ„±λœ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ˜ PIDλ₯Ό λ°˜ν™˜ν•˜κ³ , μžμ‹ ν”„λ‘œμ„ΈμŠ€μ—λŠ” 0을 λ°˜ν™˜ν•œλ‹€. λ°˜ν™˜κ°’μ΄ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λΆ€λͺ¨, μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ„œλ‘œ λ‹€λ₯Έ μž‘μ—…μ„ ν•˜λ„λ‘ μ½”λ“œλ₯Ό μ§€ 수 μžˆλ‹€.

rc에 μ–΄λ–€ 값이 λ¦¬ν„΄λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ©΄, ν˜„μž¬ 싀행쀑인 ν”„λ‘œμ„ΈμŠ€κ°€ λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μΈμ§€, μžμ‹ ν”„λ‘œμ„ΈμŠ€μΈμ§€ μ•Œ 수 μžˆλ‹€.

OSTEP 05 Process API-1687712698353.jpeg

CPU Schedulerκ°€ μ‹€ν–‰ν•  ν”„λ‘œμ„ΈμŠ€λ₯Ό μ„ νƒν•˜λŠ”λ° 이 λ•Œ μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ λ¨Όμ € 싀행될 수 μžˆλ‹€. 항상 λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€κ°€ λ¨Όμ € μ‹€ν–‰λ˜λŠ” 것은 μ•„λ‹ˆλ‹€.

2. wait() μ‹œμŠ€ν…œ 콜

OSTEP 05 Process API-1687712816426.jpeg

λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€κ°€ μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬κ²Œ ν•˜λŠ” μ‹œμŠ€ν…œ 콜. 이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€λŠ” μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ λΈ”λ‘λœλ‹€. μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ©΄ 운영 μ²΄μ œλŠ” λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ œμ–΄λ₯Ό λ°˜ν™˜ν•˜κ³ . μžμ‹ ν”„λ‘œμ„ΈμŠ€μ˜ μ’…λ£Œ μƒνƒœλ₯Ό λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ „λ‹¬ν•œλ‹€.

OSTEP 05 Process API-1687712855061.jpeg

두 κ°€μ§€ case λͺ¨λ‘ μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ λ¨Όμ € 좜λ ₯ν•œλ‹€.

  1. λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€κ°€ λ¨Όμ € μ‹€ν–‰λ˜λŠ” 경우 -> λ°”λ‘œ wait()을 호좜. 이 μ‹œμŠ€ν…œ μ½œμ€ μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ λ¦¬ν„΄ν•˜μ§€ μ•ŠλŠ”λ‹€. -> μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ λ¨Όμ € 좜λ ₯ν•œλ‹€.
  2. μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ λ¨Όμ € μ‹€ν–‰λ˜λŠ” 경우 -> μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ λ¨Όμ € 좜λ ₯ν•œλ‹€.

3. exex() μ‹œμŠ€ν…œ 콜

OSTEP 05 Process API-1687713059554.jpeg

ν˜„μž¬ 싀행쀑인 ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ 곡간을 μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž¨μœΌλ‘œ λŒ€μ²΄ν•˜λŠ” μ‹œμŠ€ν…œ 콜. 이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ μš΄μ˜μ²΄μ œλŠ” ν˜„μž¬ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ 곡간을 μ„Έλ‘œμš΄ ν”„λ‘œκ·Έλž¨μœΌλ‘œ λŒ€μ²΄ν•˜κ³ , μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž¨μ˜ 메인 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€. 자기 μžμ‹ μ΄ μ•„λ‹Œ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•΄μ•Ό ν•  λ•Œ μ‚¬μš©ν•œλ‹€. exex() ν•¨μˆ˜κ°€ μ„±κ³΅ν•˜λ©΄ κΈ°μ‘΄ ν”„λ‘œκ·Έλž¨μ€ λ¦¬ν„΄ν•˜μ§€ μ•ŠλŠ”λ‹€.

OSTEP 05 Process API-1687713142622.jpeg

execvp() μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•˜λ©΄, μžμ‹ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ 곡간이 μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž¨μΈ wc둜 λŒ€μ²΄λ˜κ³ , μ›λž˜ μžμ‹ ν”„λ‘œμ„ΈμŠ€λŠ” λ¦¬ν„΄λ˜μ§€ μ•ŠλŠ”λ‹€.

4. μ™œ 이런 APIλ₯Ό?

UNIX의 μ‰˜μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” fork()와 exec()을 뢄리해야 ν•œλ‹€. κ·Έλž˜μ•Όλ§Œ μ‰˜μ΄ fork() λ₯Ό ν˜ΈμΆœν•˜κ³  exec()λ₯Ό ν˜ΈμΆœν•˜κΈ° 전에 μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€.

μ‰˜μ€ ν”„λ‘¬ν”„νŠΈλ₯Ό ν‘œμ‹œν•˜κ³  μ‚¬μš©μžκ°€ 무언가 μž…λ ₯ν•˜κΈ°λ₯Ό κΈ°λ‹€λ¦°λ‹€. 그리고 λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•œλ‹€. λŒ€λΆ€λΆ„μ˜ μ‰˜μ€ 파일 μ‹œμŠ€ν…œμ—μ„œ μ‹€ν–‰ 파일의 μœ„μΉ˜λ₯Ό μ°Ύκ³  λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•˜μ—¬ fork()λ₯Ό ν˜ΈμΆœν•˜μ—¬ μƒˆλ‘œμš΄ μžμ‹ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§Œλ“ λ‹€. 그런 ν›„ exec()의 λ³€ν˜• 쀑 ν•˜λ‚˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚¨ ν›„ wait()을 ν˜ΈμΆœν•˜μ—¬ λͺ…λ Ήμ–΄κ°€ λλ‚˜κΈ°λ₯Ό κΈ°λ‹€λ¦°λ‹€. μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ©΄ μ‰˜μ€ wait()μœΌλ‘œλΆ€ν„° λ¦¬ν„΄ν•˜κ³  λ‹€μ‹œ ν”„λ‘¬ν”„νŠΈλ₯Ό 좜λ ₯ν•˜κ³  λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό κΈ°λ‹€λ¦°λ‹€.

OSTEP 05 Process API-1687713360756.jpeg

OSTEP 05 Process API-1687713373694.jpeg

p4λ₯Ό μ‹€ν–‰ν•˜λ©΄ 화면에 μ•„λ¬΄λŸ° 일도 μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€. κ·ΈλŸ¬λ‚˜ μ‹€μ œλ‘œλŠ” λ‹€μŒκ³Ό 같은 일이 λ°œμƒν•˜μ˜€λ‹€.

  1. p4λŠ” fork()λ₯Ό ν˜ΈμΆœν•˜μ—¬ μƒˆλ‘œμš΄ μžμ‹ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•œλ‹€.
  2. 그리고 wait() 호좜 ν›„ λŒ€κΈ°ν•œλ‹€.
  3. μžμ‹ ν”„λ‘œμ„ΈμŠ€λŠ” 좜λ ₯을 μž¬μ§€μ •ν•œλ‹€. (2번, 3번 μ–΄λ–€ 일이 λ¨Όμ € λ°œμƒν•˜λŠ”μ§€ μ•Œ 수 μ—†μŒ)
  4. execvp()λ₯Ό ν˜ΈμΆœν•˜μ—¬ wcν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚¨λ‹€.

UNIX νŒŒμ΄ν”„κ°€ 이와 μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ˜μ§€λ§Œ, pipe() μ‹œμŠ€ν…œ μ½œμ„ 톡해 μƒμ„±λœλ‹€. ν•œ ν”„λ‘œμ„ΈμŠ€μ˜ 좜λ ₯κ³Ό λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μž…λ ₯이 λ™μΌν•œ νŒŒμ΄ν”„μ— μ—°κ²°λœλ‹€. ν•œ ν”„λ‘œμ„ΈμŠ€μ˜ 좜λ ₯은 μžμ—°μŠ€λŸ½κ²Œ λ‹€μŒ ν”„λ‘œμ„ΈμŠ€μ˜ μž…λ ₯으둜 μ‚¬μš©λ˜κ³ , λͺ…λ Ήμ–΄ 체인으둜 μ‚¬μš©λœλ‹€.

5. 기타 API

  • kill() μ‹œμŠ€ν…œ μ½œμ€ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ‹œκ·Έλ„μ„ 보낸닀. μ‹œκ·Έλ„μ€ ν”„λ‘œμ„ΈμŠ€μ˜ 쀑단, μ‚­μ œ λ“±μ˜ μž‘μ—…μ— μ‚¬μš©λœλ‹€. μ‹œκ·Έλ„μ΄λΌλŠ” λ©”μ»€λ‹ˆμ¦˜μ€ μ™ΈλΆ€ 사건을 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ „λ‹¬ν•˜λŠ” ν† λŒ€μ΄λ‹€.
  • ps λͺ…λ Ήμ–΄λŠ” μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ 싀행쀑인지 μ•Œμ•„λ³΄κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.
  • top μ—­μ‹œ μ‹œμŠ€ν…œμ— μ‘΄μž¬ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ™€ κ·Έ ν”„λ‘œμ„ΈμŠ€κ°€ cpu 및 λ‹€λ₯Έ μžμ›λ“€μ„ μ–Όλ§ˆλ‚˜ μ‚¬μš©ν•˜κ³  μžˆλŠ”μ§€λ₯Ό 보여쀀닀.

참고: OSTEP ꡐ재