https://leeyh0216.github.io/posts/sid_pid_ppid_pgid/
Linux - PID, PPID, PGID, SID๋?
Linux์ PID, PPID, PGID, SID๋?
leeyh0216.github.io
Linux์ PID, PPID, PGID, SID๋?
๊ฐ๋ ์ ๋ฆฌ
PID
PID(Process ID)๋ ์ด์์ฒด์ ์์ ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ํ๋ก์ธ์ค์ ๋ถ์ฌํ๋ ๋ฒํธ๋ฅผ ์๋ฏธํ๋ค.
PPID
PPID(Parent Process ID)๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ PID๋ฅผ ์๋ฏธํ๋ค.
๋ง์ผ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ณด๋ค ์ผ์ฐ ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ ์์ ํ๋ก์ธ์ค๋ ๊ณ ์ ํ๋ก์ธ์ค๊ฐ ๋์ด PPID๋ก init process์ PID(1)๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
PGID
ํ๋ก์ธ์ค ๊ทธ๋ฃน(Process Group)์ 1๊ฐ ์ด์์ ํ๋ก์ธ์ค์ ๋ฌถ์์ ์๋ฏธํ๋ค.
PGID(Process Group ID)๋ ์ด๋ฌํ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ์๋ณํ๊ธฐ ์ํด ๋ถ์ฌ๋๋ ๋ฒํธ์ด๋ค.
SID
์ธ์ (Session)์ 1๊ฐ ์ด์์ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ๋ฌถ์์ ์๋ฏธํ๋ค.
SID(Session ID)๋ ์ด๋ฌํ ์ธ์ ์ ์๋ณํ๊ธฐ ์ํด ๋ถ์ฌ๋๋ ๋ฒํธ์ด๋ค.
๋ฆฌ๋ ์ค์์์ PID, PPID, PGID, SID
๋ฆฌ๋ ์ค ์ด์์ฒด์ ์์ PID, PPID, PGID, SID๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ps ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์คํ ์ค์ธ ๋ชจ๋ ํ๋ก์ธ์ค์ PID, PPID, PGID, SID, COMMAND๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
์ ๋ช ๋ น์ด๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.(Docker, Ubuntu 16.04)
๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค์ ๊ด๊ณ ์ดํดํ๊ธฐ
1 ~ 100 ๊น์ง ์ํํ๋ฉฐ “Hello World”๋ฅผ ์ถ๋ ฅํ๋ child.sh์ ์ด๋ฅผ ์คํํ๋ parent.sh ์คํฌ๋ฆฝํธ๊ฐ ์กด์ฌํ๋ค.
child.sh
parent.sh
๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด parent.sh๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํํ๊ณ , ps -A -o pid,ppid,pgid,sid,command ๋ช ๋ น์ด๋ฅผ ํตํด ํ๋ก์ธ์ค ๋ชฉ๋ก์ ํ์ธํด๋ณธ๋ค.
child.sh์ PPID๊ฐ ์์ ์ ์คํํ parent.sh์ PID์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ํ parent.sh์ PGID์ child.sh์ PGID๊ฐ 502๋ก ๋์ผํ Process Group์ ์ํด์๋ ๊ฒ์ ์ ์ ์๋ค.
PGID์ ์กด์ฌ ์ด์
์์ ์ํ์์ kill 502 ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ parent.sh ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ๋ค, ps -A -o pid,ppid,pgid,sid,command ๋ช ๋ น์ด๋ฅผ ํตํด ํ๋ก์ธ์ค ๋ชฉ๋ก์ ํ์ธํด๋ณธ๋ค.
parent.sh๊ฐ ์คํํ child.sh๋ ์์ง๋ ์คํ๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
child.sh๊ฐ ๊ณ์ ์คํ๋๊ณ ์๋ ์ด์ ๋ kill ๋ช ๋ น์ด์ Usage๋ฅผ ํ์ธํด๋ณด๋ฉด ์ ์ ์๋ค.
kill ๋ช ๋ น์ด๋ PID๋ฅผ ๊ธฐ์ค์ผ๋ก ์คํ๋๋ฉฐ, ํน์ Process์ Signal์ ๋ณด๋ธ๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์ Signal์ ์์ ํ Process๋ ์๊ธฐ ์์ ์ด ์ข ๋ฃ๋ ๋ฟ ์์ ํ๋ก์ธ์ค์๊น์ง Signal์ ์ ๋ฌํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด POSIX ๊ธฐ๋ฐ ์ด์์ฒด์ ์์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋ฌถ์ด์ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ๋ง๋ค๊ณ , ํ๋ก์ธ์ค ๊ทธ๋ฃน์ PGID๋ฅผ ๋ถ์ฌํ์ฌ ํ๋ฒ์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ์ ์๋๋ก ํ๋ค.
PGID๋ก ํ๋ก์ธ์ค ์ข ๋ฃํ๊ธฐ
๋ค์ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ณ ps -A -o pid,ppid,pgid,sid,command ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ํ๋ก์ธ์ค ๋ชฉ๋ก์ ํ์ธํ๋ค.
|
kill -- -$PGID ๋ช ๋ น์ด๋ฅผ ํตํด Process Group์ ์ํ ๋ชจ๋ Process๋ค์ ์ข ๋ฃํ ์ ์๋ค.
์ ๋ช ๋ น์ด๋ฅผ ์ํํ ๋ค ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ๋ฉด parent.sh์ child.sh ๋ชจ๋ ์ข ๋ฃ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
PGID ๋ณ๊ฒฝํ์ฌ ์์ ํ๋ก์ธ์ค ์คํํ๊ธฐ
PGID๋ฅผ ํตํ Kill ๋ช ๋ น์ด ์ํ ์ ๋ถ๋ชจ ํ๋ก์ธ์ค์์ ์คํ๋ ์์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๊ณ ์ถ์ง ์๋ค๋ฉด, ์์ ํ๋ก์ธ์ค ์คํ ์ PGID๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
C๋ Python์์๋ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ง๋ง, Bash Script์์๋ Job Control ๊ธฐ๋ฅ์ ํ์ฑํ ์ํค๋ ๋ช ๋ น์ด๋ฅผ ํตํด PGID๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
parent.sh๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ ํ ์คํํด๋ณด์.
์์ ํ๋ก์ธ์ค ์คํ ์ set -o monitor ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ํ๋ก์ธ์ค ์คํ ์ PGID๋ฅผ ์์ ํ๋ก์ธ์ค์ PID๋ก ๋ณ๊ฒฝํ ์ ์๋ค.(set -o monitor ๋ช ๋ น์ด์ ์์ธํ ๋ด์ฉ์ bash manual์ Job Control์ ํ์ธ)
parent.sh ์คํฌ๋ฆฝํธ ์คํ ํ ps -A -o pid,ppid,pgid,sid,command ๋ช ๋ น์ ์ํํด๋ณด์.
parent.sh์ PGID๊ฐ 965์ธ ๋ฐ๋ฉด child.sh์ PGID๋ child.sh์ PID์ ๋์ผํ 966์ผ๋ก, PGID๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'Backgrounds > Operating System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณต๋ฃก์ฑ | Chapter 3. Processes 2. (0) | 2022.12.02 |
---|---|
[ C ]ํ์ผ ์ด๊ธฐ - open (0) | 2022.11.24 |
Linux ํฐ๋ฏธ๋ ๋ช ๋ น์ด ๋ชจ์ (0) | 2022.11.16 |
๋ฉ๋ชจ๋ฆฌ ์์ญ(Code, Data, Heap, Stack) (0) | 2022.11.16 |