νλ‘μΈμ€ κ³μΈ΅ ꡬ쑰
νλ‘μΈμ€ κ³μΈ΅ ꡬ쑰λ μ΄μ체μ μμ νλ‘μΈμ€λ€ κ°μ κ΄κ³λ₯Ό λνλ΄λ λ°©λ²μ λ§ν©λλ€. μ΄μ체μ λ μ¬λ¬ νλ‘μΈμ€λ€μ κ΄λ¦¬νκ³ μ΄λ€ κ°μ μνΈμμ©μ μ‘°μ¨νλλ°, μ΄λ¬ν νλ‘μΈμ€λ€μ μ’
μ’
κ³μΈ΅μ μΈ κ΅¬μ‘°λ₯Ό νμ±ν©λλ€. μ΄ κ΅¬μ‘°λ μΌλ°μ μΌλ‘ λΆλͺ¨-μμ κ΄κ³λ‘ λνλΌ μ μμ΅λλ€.
1. λΆλͺ¨ νλ‘μΈμ€(Parent Process): μ΄μ체μ μμ μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±ν λ, λΆλͺ¨ νλ‘μΈμ€λ μλ‘μ΄ μμ νλ‘μΈμ€λ₯Ό μμ±ν©λλ€. λΆλͺ¨ νλ‘μΈμ€λ μμ νλ‘μΈμ€λ₯Ό μμ±νκ³ , μμμ ν λΉνλ©°, μμ νλ‘μΈμ€μ λμμ κ°μν μ±
μμ΄ μμ΅λλ€.
2. μμ νλ‘μΈμ€(Child Process): λΆλͺ¨ νλ‘μΈμ€μ μν΄ μμ±λ νλ‘μΈμ€λ₯Ό μμ νλ‘μΈμ€λΌκ³ ν©λλ€. μμ νλ‘μΈμ€λ λΆλͺ¨ νλ‘μΈμ€λ‘λΆν° μμκ³Ό κΆνμ μμλ°μ΅λλ€. λΆλͺ¨ νλ‘μΈμ€μ μμ νλ‘μΈμ€ κ°μλ νΉλ³ν ν΅μ λ©μ»€λμ¦μ΄λ λ°μ΄ν° 곡μ λ°©λ²μ μ¬μ©νμ¬ μνΈμμ©ν μ μμ΅λλ€.
λΆλͺ¨ νλ‘μΈμ€μ μμ νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ΄κΈ° λλ¬Έμ κ°κΈ° λ€λ₯Έ PIDλ₯Ό κ°μ§λλ€. μΌλΆ μ΄μ체μ μμλ μμ νλ‘μΈμ€μ PCBμ λΆλͺ¨ νλ‘μΈμ€μ PIDμΈ PPID(Parent Process ID)κ° κΈ°λ‘λ©λλ€. κ·Έλ¦¬κ³ λΆλͺ¨ νλ‘μΈμ€λ‘λΆν° μμ±λ μμ νλ‘μΈμ€λ μ€ν κ³Όμ μμ λ λ€λ₯Έ μμ νλ‘μΈμ€λ₯Ό μμ±ν μ μμ΅λλ€. λ§μ μ΄μ체μ μμλ μ΄μ²λΌ νλ‘μΈμ€κ° νλ‘μΈμ€λ₯Ό λ³λ κ³μΈ΅μ μΈ κ΅¬μ‘°λ‘μ¨ νλ‘μΈμ€λ€μ κ΄λ¦¬ν©λλ€.
μ΄λ¬ν νλ‘μΈμ€λ€μ κ³μΈ΅ ꡬ쑰λ₯Ό νλ‘μΈμ€ κ³μΈ΅ ꡬ쑰λΌκ³ ν©λλ€. μ λμ€ μ΄μ체μ μμλ κ°μ₯ μ΅μ΄μ νλ‘μΈμ€μΈ init νλ‘μΈμ€λΆν° μμν©λλ€. 리λ
μ€λ systemd, macOSμμλ launchdμ
λλ€.
νλ‘μΈμ€ μμ± κΈ°λ²
λΆλͺ¨ νλ‘μΈμ€λ₯Ό ν΅ν΄ μμ±λ μμ νλ‘μΈμ€λ€μ 볡μ μ μ· κ°μμ κΈ°λ₯Ό ν΅ν΄ μ€νλ©λλ€. λΆλͺ¨ νλ‘μΈμ€λ fork()λ₯Ό ν΅ν΄μ μμ μ 볡μ¬λ³Έμ μμ νλ‘μΈμ€λ‘ μμ±ν΄λ΄κ³ , λ§λ€μ΄μ§ μμ νλ‘μΈμ€λ exec()λ₯Ό ν΅ν΄ μμ μ λ©λͺ¨λ¦¬ 곡κ°μ λ€λ₯Έ νλ‘κ·Έλ¨μΌλ‘ κ΅μ²΄ν©λλ€.
fork()λ μκΈ° μμ νλ‘μΈμ€μ 볡μ¬λ³Έμ λ§λλ μμ€ν νΈμΆμ λλ€. μμ νλ‘μΈμ€λ λΆλͺ¨ νλ‘μΈμ€μ 볡μ¬λ³Έμ΄κΈ° λλ¬Έμ λΆλͺ¨ νλ‘μΈμ€μ μμλ€μ΄ μμ νλ‘μΈμ€μ μμλ©λλ€. κ·Έλ¦¬κ³ λ§λ€μ΄μ§ 볡μ¬λ³Έμ exec() νΈμΆμ ν΅ν΄ μλ‘μ΄ νλ‘κ·Έλ¨μΌλ‘ μ νλ©λλ€. exec()λ μμ μ λ©λͺ¨λ¦¬ 곡κ°μ μλ‘μ΄ νλ‘κ·Έλ¨ λ΄μ©μΌλ‘ μ ννμ¬ λ 립μ μΌλ‘ μ€ννλ μμ€ν νΈμΆμ λλ€.
exec()λ₯Ό νΈμΆνλ©΄ μ½λ μμκ³Ό λ°μ΄ν° μμμ΄ μ€νν νλ‘κ·Έλ¨μ λ΄μ©μΌλ‘ λ°λκ³ λλ¨Έμ§ μ€νκ³Ό ν μμμ μ΄κΈ°νλ©λλ€.
#!/bin/bash
echo "Enter a command:"
read command
# λΆλͺ¨ νλ‘μΈμ€μμ μμ νλ‘μΈμ€ μμ±
if fork() == 0; then
# μμ νλ‘μΈμ€μμ μ
λ ₯λ λͺ
λ Ήμ΄ μ€ν
exec $command
else
# λΆλͺ¨ νλ‘μΈμ€λ μμ νλ‘μΈμ€κ° λλκΈ°λ₯Ό κΈ°λ€λ¦Ό
wait
echo "Command execution completed."
fi
μ μ€ν¬λ¦½νΈμμ, μ¬μ©μκ° μ
λ ₯ν λͺ
λ Ήμ΄λ fork()λ₯Ό ν΅ν΄ μμ νλ‘μΈμ€λ‘ μ λ¬λκ³ , μμ νλ‘μΈμ€λ exec()λ₯Ό μ¬μ©νμ¬ ν΄λΉ λͺ
λ Ήμ΄λ₯Ό μ€νν©λλ€. λΆλͺ¨ νλ‘μΈμ€λ μμ νλ‘μΈμ€κ° μ€νμ λ§μΉ λκΉμ§ κΈ°λ€λ¦° ν κ²°κ³Όλ₯Ό μΆλ ₯ν©λλ€.
μ΄λ¬ν λ°©μμΌλ‘ fork()μ exec()λ νλ‘μΈμ€ κ°μ κ³μΈ΅ ꡬ쑰λ₯Ό νμ±νκ³ μλ‘μ΄ νλ‘κ·Έλ¨μ μ€ννλ λ° μ¬μ©λ μ μμ΅λλ€.
μΆμ²: νΌμ 곡λΆνλ μ»΄ν¨ν° ꡬ쑰μ μ΄μ체μ
'μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ‘μΈμ€ λκΈ°ν κΈ°λ² (0) | 2023.11.06 |
---|---|
CPU μ€μΌμ€λ§ κ°λ κ³Ό μκ³ λ¦¬μ¦ (0) | 2023.11.05 |
λ°λͺ¬(Deamon) νλ‘μΈμ€λ? (0) | 2023.10.28 |
μ΄μ€λͺ¨λ(Dual Mode)μ μμ€ν νΈμΆ(System Call) (0) | 2023.10.28 |
컀λ(Kernel)κ³Ό μΈν°νμ΄μ€(Interface) (0) | 2023.09.12 |
λκΈ