Linux Process Life Cycle

Hein Htet WinHein Htet Win
3 min read

แ€€แ€ฒ แ€’แ€ฎโ€‹แ€”แ€ฑแ€ทแ€™แ€พแ€ฌแ€œแ€Šแ€บแ€ธ Linux แ€”แ€ฒแ€ทแ€•แ€แ€บแ€žแ€€แ€บแ€แ€ฒแ€ท under the hood แ€‘แ€ฒแ€€ process โ€‹แ€แ€ฝแ€ฑแ€กแ€œแ€ฏแ€•แ€บแ€œแ€ฏแ€•แ€บแ€•แ€ฏแ€ถแ€€แ€ญแ€ฏ แ€†แ€€แ€บแ€œแ€€แ€บโ€‹แ€•แ€ผแ€ฑแ€ฌแ€žแ€ฝแ€ฌแ€ธแ€•แ€ซแ€™แ€šแ€บแ‹ แ€’แ€ฎแ€•แ€ญแ€ฏแ€ทแ€…แ€บแ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท Process แ€แ€…แ€บแ€แ€ฏแ€›แ€ฒแ€ท แ€…แ€แ€„แ€บ create แ€œแ€ฏแ€•แ€บแ€œแ€ญแ€ฏแ€€แ€บแ€แ€ฒแ€ทแ€กแ€แ€ปแ€ญแ€”แ€บแ€€แ€…แ€•แ€ผแ€ฎแ€ธ แ€กแ€†แ€„แ€บแ€ทแ€†แ€„แ€บแ€ทแ€–แ€ผแ€แ€บแ€žแ€”แ€บแ€ธแ€›แ€แ€ฒแ€ท different states โ€‹แ€แ€ฝแ€ฑแŠ แ€’แ€ฎ process โ€‹แ€แ€ฝแ€ฑแ€กแ€แ€ปแ€„แ€บแ€ธแ€แ€ปแ€„แ€บแ€ธ communicate แ€˜แ€šแ€บแ€œแ€ญแ€ฏแ€œแ€ฏแ€•แ€บแ€œแ€ฒ แ€†แ€ญแ€ฏแ€แ€ฌโ€‹แ€แ€ฝแ€ฑ แ€‘แ€Šแ€บแ€ทโ€‹แ€•แ€ผแ€ฑแ€ฌแ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹

๐‘ซ๐’Š๐’‡๐’‡๐’†๐’“๐’†๐’๐’• ๐’”๐’•๐’‚๐’•๐’†๐’” ๐’๐’‡ ๐’‚ ๐’‘๐’“๐’๐’„๐’†๐’”๐’”

แ€€แ€ปแ€ฝแ€”แ€บโ€‹แ€แ€ฑแ€ฌแ€บแ€แ€ญแ€ฏแ€ทโ€‹แ€แ€ฝแ€ฑแ€Ÿแ€ฌ system โ€‹แ€แ€…แ€บแ€แ€ฏแ€€แ€ญแ€ฏ แ€… power on แ€œแ€ญแ€ฏแ€€แ€บแ€•แ€ผแ€ฎแ€†แ€ญแ€ฏแ€แ€ฌแ€”แ€ฒแ€ท OS แ€€โ€‹แ€”แ€ฑแ€žแ€ฐแ€ท แ€กแ€œแ€ญแ€ฏแ€กโ€‹แ€œแ€ปแ€พแ€ฑแ€ฌแ€€แ€บ start แ€œแ€ฏแ€•แ€บแ€žแ€ฝแ€ฌแ€ธแ€แ€ฒแ€ท process โ€‹แ€แ€ฝแ€ฑแ€›แ€พแ€ญแ€žแ€œแ€ญแ€ฏ user แ€€ run แ€แ€ปแ€„แ€บแ€œแ€ญแ€ฏแ€ท แ€›แ€Šแ€บแ€›แ€ฝแ€šแ€บแ€แ€ปแ€€แ€บแ€›แ€พแ€ญแ€›แ€พแ€ญ แ€… run แ€œแ€ญแ€ฏแ€€แ€บแ€แ€ฒแ€ท process โ€‹แ€แ€ฝแ€ฑแ€œแ€Šแ€บแ€ธแ€›แ€พแ€ญแ€•แ€ซแ€แ€šแ€บแ‹ แ€žแ€ญแ€ฏแ€ทโ€‹แ€žแ€ฑแ€ฌแ€บ แ€˜แ€šแ€บแ€œแ€ญแ€ฏแ€•แ€„แ€บแ€–แ€ผแ€…แ€บแ€–แ€ผแ€…แ€บ process แ€แ€…แ€บแ€แ€ฏ แ€…แ€•แ€ผแ€ฎแ€†แ€ญแ€ฏแ€แ€ฌแ€”แ€ฒแ€ท แ€’แ€ฎ process โ€‹แ€แ€ฝแ€ฑแ€€แ€žแ€ฐแ€แ€ญแ€ฏแ€ทแ€›แ€ฒแ€ท life cycle แ€™แ€พแ€ฌแ€™แ€แ€ฐแ€Šแ€ฎแ€แ€ฒแ€ท different states โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏแ€–แ€ผแ€แ€บแ€žแ€”แ€บแ€ธแ€›แ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ฎ states โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏแ€™แ€ผแ€„แ€บแ€žแ€ฌโ€‹แ€กแ€ฑแ€ฌแ€„แ€บ โ€‹แ€กแ€ฑแ€ฌแ€€แ€บแ€€แ€•แ€ฏแ€ถโ€‹แ€œแ€ฑแ€ธแ€”แ€ฒแ€ท แ€แ€ฝแ€ฒแ€€แ€ผแ€Šแ€บแ€ทโ€‹แ€•แ€ฑแ€ธแ€•แ€ซแ‹ แ€…แ€ฌโ€‹แ€›แ€ฑแ€ธแ€žแ€ฐแ€แ€ญแ€ฏแ€ทแ€Ÿแ€ฌ Linux system แ€แ€…แ€บแ€แ€ฏแ€€แ€ญแ€ฏ แ€…แ€•แ€ผแ€ฎแ€ธ boot แ€แ€€แ€บแ€œแ€ญแ€ฏแ€€แ€บแ€•แ€ผแ€ฎแ€†แ€ญแ€ฏแ€แ€ฌแ€”แ€ฒแ€ท init process แ€†แ€ญแ€ฏแ€แ€ฒแ€ท process แ€แ€…แ€บแ€แ€ฏแ€€แ€ญแ€ฏ machine แ€€แ€… run แ€œแ€ญแ€ฏแ€€แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€šแ€แ€ฏโ€‹แ€”แ€ฑแ€ฌแ€€แ€บแ€•แ€ญแ€ฏแ€„แ€บแ€ธ modern system โ€‹แ€แ€ฝแ€ฑแ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท init แ€กแ€…แ€ฌแ€ธ systemd แ€€แ€ญแ€ฏโ€‹แ€•แ€ผแ€ฑแ€ฌแ€„แ€บแ€ธแ€œแ€ฒ แ€กแ€žแ€ฏแ€ถแ€ธแ€•แ€ผแ€ฏแ€œแ€ฌแ€แ€ฌโ€‹แ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ซโ€‹แ€•แ€ฑแ€™แ€šแ€บแ€ท แ€žแ€ฐแ€แ€ญแ€ฏแ€ท แ‚แ€แ€ฏแ€œแ€ฏแ€ถแ€ธแ€›แ€ฒแ€ทแ€แ€ฐแ€Šแ€ฎแ€แ€ฌแ€€โ€‹แ€แ€ฑแ€ฌแ€ท vmlinuz แ€†แ€ญแ€ฏแ€แ€ฒแ€ท Linux kernel executable แ€€แ€ญแ€ฏ memory โ€‹แ€•แ€ฑแ€ซแ€บแ€†แ€ฝแ€ฒแ€แ€„แ€บแ€œแ€ญแ€ฏแ€€แ€บแ€แ€ฌแ€€โ€‹แ€”แ€ฑ Linux kernel แ€€ create แ€œแ€ฏแ€•แ€บแ€œแ€ญแ€ฏแ€€แ€บแ€แ€ฒแ€ท mother process แ€œแ€ญแ€ฏแ€ทโ€‹แ€•แ€ผแ€ฑแ€ฌแ€œแ€ญแ€ฏแ€ทแ€›แ€แ€ฌแ€•แ€ฒแ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€กแ€ฒแ€ทโ€‹แ€แ€ฑแ€ฌแ€ท แ€’แ€ฎ init process แ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท parent process แ€›แ€šแ€บแ€œแ€ญแ€ฏแ€ทแ€™แ€›แ€พแ€ญโ€‹แ€แ€ฑแ€ฌแ€ทแ€•แ€ซแ€˜แ€ฐแ€ธแ‹ แ€žแ€ฐแ€€โ€‹แ€”แ€ฑแ€™แ€พแ€แ€…แ€บแ€†แ€„แ€บแ€ท แ€’แ€ฎ system แ€‘แ€ฒแ€™แ€พแ€ฌแ€›แ€พแ€ญแ€แ€ฒแ€ท process โ€‹แ€แ€ฝแ€ฑโ€‹แ€™แ€ฝแ€ฑแ€ธแ€–แ€ฝแ€ฌแ€ธแ€œแ€ฌแ€™แ€พแ€ฌแ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹ Linux boot process step by step แ€˜แ€šแ€บแ€œแ€ญแ€ฏ แ€กแ€œแ€ฏแ€•แ€บแ€œแ€ฏแ€•แ€บแ€œแ€ฒแ€†แ€ญแ€ฏแ€แ€ฌแ€€แ€ญแ€ฏโ€‹แ€แ€ฑแ€ฌแ€ท โ€‹แ€”แ€ฑแ€ฌแ€€แ€บแ€™แ€พ post แ€แ€…แ€บแ€แ€ฏแ€”แ€ฒแ€ทแ€žแ€•แ€บแ€žแ€•แ€บ sharing แ€‘แ€•แ€บแ€œแ€ฏแ€•แ€บแ€•แ€ซแ€ฅแ€ฎแ€ธแ€™แ€šแ€บแ‹ แ€€แ€ฒ แ€•แ€ผแ€”แ€บแ€†แ€€แ€บแ€œแ€ญแ€ฏแ€€แ€บแ€€แ€ผแ€›โ€‹แ€กแ€ฑแ€ฌแ€„แ€บ.. แ€กแ€ฒแ€ทโ€‹แ€แ€ฑแ€ฌแ€ท แ€’แ€ฎ init process โ€‹แ€”แ€ฑแ€€แ€™แ€พแ€€แ€ปแ€ฝแ€”แ€บโ€‹แ€แ€ฑแ€ฌแ€บแ€แ€ญแ€ฏแ€ท แ€Ÿแ€ญแ€ฏแ€แ€…แ€บโ€‹แ€”แ€ฑแ€ทแ€€แ€žแ€ญแ€แ€ฒแ€ทแ€แ€ฒแ€ท fork() function แ€€แ€ญแ€ฏแ€กแ€žแ€ฏแ€ถแ€ธแ€•แ€ผแ€ฏแ€•แ€ผแ€ฎแ€ธ child process โ€‹แ€แ€ฝแ€ฑแ€†แ€€แ€บแ€œแ€€แ€บโ€‹แ€•แ€ฑแ€ซแ€บโ€‹แ€•แ€ฑแ€ซแ€€แ€บแ€œแ€ฌแ€แ€ฌแ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€กแ€ฒแ€ทโ€‹แ€แ€ฑแ€ฌแ€ทแ€…แ€ฌโ€‹แ€›แ€ฑแ€ธแ€žแ€ฐแ€แ€ญแ€ฏแ€ทแ€€ ps command แ€”แ€ฒแ€ท running process โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏแ€€แ€ผแ€Šแ€บแ€ทแ€€แ€ผแ€Šแ€บแ€ทแ€™แ€šแ€บแ€†แ€ญแ€ฏแ€›แ€„แ€บ แ€…แ€ฌโ€‹แ€›แ€ฑแ€ธแ€žแ€ฐแ€แ€ญแ€ฏแ€ท run แ€œแ€ญแ€ฏแ€€แ€บแ€แ€ฒแ€ท commands โ€‹แ€แ€ฝแ€ฑแ€€ (แ€กโ€‹แ€•แ€ฑแ€ซแ€บแ€€ ps command แ€กแ€•แ€ซแ€กแ€แ€„แ€บ) shell แ€›แ€ฒแ€ท child process แ€กโ€‹แ€”แ€ฑแ€”แ€ฒแ€ทแ€›แ€พแ€ญโ€‹แ€”แ€ฑแ€แ€ฌ โ€‹แ€แ€ฝแ€ฑแ€ทแ€™แ€ผแ€„แ€บแ€›แ€™แ€พแ€ฌแ€•แ€ซแ‹ แ€’แ€ฎแ€œแ€ญแ€ฏแ€•แ€ฒ แ€€แ€ปแ€ฝแ€”แ€บโ€‹แ€แ€ฑแ€ฌแ€บแ€แ€ญแ€ฏแ€ทแ€™แ€ผแ€„แ€บแ€›แ€แ€šแ€บแ€ท GUI โ€‹แ€แ€ฝแ€ฑแ€€แ€œแ€Šแ€บแ€ธ แ€กโ€‹แ€•แ€ฑแ€ซแ€บแ€™แ€พแ€ฌโ€‹แ€•แ€ผแ€ฑแ€ฌแ€แ€ฒแ€ทแ€แ€ฒแ€ท init process แ€›แ€ฒแ€ท child process โ€‹แ€แ€ฝแ€ฑแ€กโ€‹แ€”แ€ฑแ€”แ€ฒแ€ทแ€แ€Šแ€บแ€›แ€พแ€ญโ€‹แ€”แ€ฑแ€แ€ฌแ€•แ€ซแ‹ Process แ€แ€…แ€บแ€แ€ฏ แ€…แ€แ€„แ€บแ€–แ€ผแ€…แ€บโ€‹แ€•แ€ฑแ€ซแ€บแ€œแ€ฌแ€แ€ฒแ€ท แ€กแ€แ€ปแ€ญแ€”แ€บแ€€แ€…แ€œแ€ญแ€ฏแ€ท แ€žแ€ฐแ€ทแ€›แ€ฒแ€ท task แ€•แ€ผแ€ฎแ€ธแ€†แ€ฏแ€ถแ€ธแ€žแ€ฝแ€ฌแ€ธแ€แ€ฒแ€ทแ€กแ€แ€ปแ€ญแ€”แ€บแ€‘แ€ญ แ€–แ€ผแ€แ€บโ€‹แ€€แ€ปแ€ฑแ€ฌแ€บแ€›แ€แ€ฒแ€ท แ€กแ€†แ€„แ€บแ€ท แ„แ€†แ€„แ€บแ€ทแ€€แ€ญแ€ฏ แ€แ€…แ€บแ€แ€ฏแ€แ€ปแ€„แ€บแ€ธแ€†แ€ฎโ€‹แ€•แ€ผแ€ฑแ€ฌแ€žแ€ฝแ€ฌแ€ธแ€•แ€ซแ€™แ€šแ€บแ‹

1. ๐‘น๐’†๐’‚๐’…๐’š / ๐‘น๐’–๐’๐’๐’Š๐’๐’ˆ

แ€’แ€ฎ state แ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท process โ€‹แ€แ€ฝแ€ฑแ€Ÿแ€ฌแ€œแ€€แ€บแ€›แ€พแ€ญ CPU โ€‹แ€•แ€ฑแ€ซแ€บแ€™แ€พแ€ฌ processing time แ€šแ€ฐโ€‹แ€”แ€ฑแ€•แ€ผแ€ฎแ€ธ execute แ€œแ€ฏแ€•แ€บโ€‹แ€”แ€ฑแ€แ€ฌแ€–แ€ผแ€…แ€บแ€”แ€ญแ€ฏแ€„แ€บแ€žแ€œแ€ญแ€ฏ run แ€–แ€ญแ€ฏแ€ท ready แ€–แ€ผแ€…แ€บโ€‹แ€”แ€ฑแ€•แ€ผแ€ฎแ€ธ scheduler แ€€ assign แ€แ€ปแ€™โ€‹แ€•แ€ฑแ€ธโ€‹แ€žแ€ฑแ€ธแ€œแ€ญแ€ฏแ€ท โ€‹แ€…แ€ฑแ€ฌแ€„แ€บแ€ทโ€‹แ€”แ€ฑแ€›แ€แ€ฒแ€ท process โ€‹แ€แ€ฝแ€ฑแ€œแ€Šแ€บแ€ธแ€–แ€ผแ€…แ€บแ€”แ€ญแ€ฏแ€„แ€บแ€•แ€ซแ€แ€šแ€บแ‹

2. ๐‘พ๐’‚๐’Š๐’•๐’Š๐’๐’ˆ / ๐‘บ๐’๐’†๐’†๐’‘๐’Š๐’๐’ˆ

แ€’แ€ฎ state แ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท process แ€แ€…แ€บแ€แ€ฏแ€Ÿแ€ฌ run โ€‹แ€”แ€ฑแ€›แ€„แ€บแ€ธ event แ€แ€…แ€บแ€แ€ฏแ€แ€ฏแ€€แ€ญแ€ฏโ€‹แ€…แ€ฑแ€ฌแ€„แ€บแ€ทโ€‹แ€”แ€ฑแ€แ€ฌแ€™แ€ปแ€ญแ€ฏแ€ธแŠ แ€ฅแ€•แ€™แ€ฌแ€กแ€ฌแ€ธแ€–แ€ผแ€„แ€บแ€ท hard disk โ€‹แ€•แ€ฑแ€ซแ€บแ€™แ€พแ€ฌแ€›แ€พแ€ญแ€แ€ฒแ€ท file แ€แ€…แ€บแ€แ€ฏแ€€แ€ญแ€ฏแ€–แ€แ€บแ€–แ€ญแ€ฏแ€ทแ€œแ€ญแ€ฏแ€แ€šแ€บแ€†แ€ญแ€ฏแ€›แ€„แ€บ I/O wait time แ€›แ€พแ€ญแ€แ€ฒแ€ทแ€กแ€แ€ฝแ€€แ€บโ€‹โ€‹แ€€แ€ผแ€ฑแ€ฌแ€„แ€บแ€ท run โ€‹แ€”แ€ฑแ€แ€ฒแ€ท state แ€€โ€‹แ€”แ€ฑ แ€’แ€ฎ process แ€Ÿแ€ฌ sleeping state แ€€แ€ญแ€ฏโ€‹แ€•แ€ผแ€ฑแ€ฌแ€„แ€บแ€ธแ€แ€ถแ€œแ€ญแ€ฏแ€€แ€บแ€›แ€•แ€ซแ€แ€šแ€บแ‹ โ€‹แ€”แ€ฑแ€ฌแ€€แ€บแ€žแ€ฐแ€œแ€ญแ€ฏแ€กแ€•แ€บแ€แ€ฒแ€ท I/O แ€œแ€ฏแ€•แ€บแ€•แ€ผแ€ฎแ€ธแ€•แ€ผแ€ฎแ€†แ€ญแ€ฏแ€›แ€„แ€บโ€‹แ€แ€ฑแ€ฌแ€ท แ€’แ€ฎ process แ€Ÿแ€ฌแ€แ€…แ€บแ€–แ€”แ€บแ€•แ€ผแ€”แ€บแ€•แ€ผแ€ฎแ€ธ running แ€œแ€ฏแ€•แ€บแ€–แ€ญแ€ฏแ€ทแ€กแ€แ€ฝแ€€แ€บ queue แ€‘แ€ฒแ€™แ€พแ€ฌ ready state แ€กโ€‹แ€”แ€ฑแ€”แ€ฒแ€ท แ€•แ€ผแ€”แ€บโ€‹แ€…แ€ฑแ€ฌแ€„แ€บแ€ทแ€›แ€™แ€พแ€ฌแ€•แ€ฒ แ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€กแ€ฒแ€ทโ€‹แ€แ€ฑแ€ฌแ€ทแ€™แ€พ scheduler แ€กโ€‹แ€”แ€ฑแ€”แ€ฒแ€ท แ€’แ€ฎ process แ€€แ€ญแ€ฏ cpu run time แ€•แ€ผแ€”แ€บแ€žแ€แ€บแ€™แ€พแ€แ€บโ€‹แ€•แ€ฑแ€ธแ€–แ€ญแ€ฏแ€ท แ€œแ€ฏแ€•แ€บโ€‹แ€†แ€ฑแ€ฌแ€„แ€บแ€™แ€พแ€ฌแ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹

3. ๐‘ป๐’†๐’“๐’Ž๐’Š๐’๐’‚๐’•๐’†๐’… / ๐‘บ๐’•๐’๐’‘๐’‘๐’†๐’…

แ€’แ€ฎ state แ€€โ€‹แ€แ€ฑแ€ฌแ€ท Process แ€แ€…แ€บแ€แ€ฏแ€€ แ€žแ€ฐแ€ทแ€›แ€ฒแ€ท run แ€›แ€แ€ฒแ€ท แ€›แ€Šแ€บแ€›แ€ฝแ€šแ€บแ€แ€ปแ€€แ€บแ€•แ€ผแ€ฎแ€ธโ€‹โ€‹แ€™แ€ผแ€ฑแ€ฌแ€€แ€บแ€žแ€ฝแ€ฌแ€ธแ€œแ€ญแ€ฏแ€ท exit() function แ€”แ€ฒแ€ทแ€‘แ€ฝแ€€แ€บแ€žแ€ฝแ€ฌแ€ธแ€แ€ฌ แ€–แ€ผแ€…แ€บแ€”แ€ญแ€ฏแ€„แ€บแ€žแ€œแ€ญแ€ฏแŠ แ€แ€…แ€บแ€แ€ผแ€ฌแ€ธ process แ€€โ€‹โ€‹แ€”แ€ฑ signal แ€แ€…แ€บแ€แ€ฏแ€แ€ฏแ€”แ€ฒแ€ท interupt แ€œแ€ฏแ€•แ€บแ€œแ€ญแ€ฏแ€ท stopped แ€–แ€ผแ€…แ€บแ€žแ€ฝแ€ฌแ€ธแ€แ€ฌแ€œแ€Šแ€บแ€ธแ€–แ€ผแ€…แ€บแ€”แ€ญแ€ฏแ€„แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ฎ state แ€™แ€พแ€ฌแ€†แ€ญแ€ฏแ€›แ€„แ€บโ€‹แ€แ€ฑแ€ฌแ€ท process table แ€‘แ€ฒแ€€โ€‹แ€”แ€ฑแ€•แ€ซ แ€‘แ€ฝแ€€แ€บแ€žแ€ฝแ€ฌแ€ธแ€™แ€พแ€ฌแ€•แ€ฒ แ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹ Signals โ€‹แ€แ€ฝแ€ฑแ€”แ€ฒแ€ทแ€•แ€แ€บแ€žแ€€แ€บแ€•แ€ผแ€ฎแ€ธโ€‹แ€แ€ฑแ€ฌแ€ทแ€œแ€Šแ€บแ€ธ โ€‹แ€”แ€ฑแ€ฌแ€€แ€บแ€™แ€พแ€กโ€‹แ€žแ€ฑแ€ธแ€…แ€ญแ€•แ€บโ€‹แ€›แ€ฑแ€ธแ€•แ€ซแ€™แ€šแ€บแŠ โ€‹แ€œแ€ฑแ€ฌโ€‹แ€œแ€ฑแ€ฌแ€†แ€šแ€บโ€‹แ€แ€ฑแ€ฌแ€ท SIGTERM or SIGSTOP แ€œแ€ญแ€ฏแ€™แ€ปแ€ญแ€ฏแ€ธ signals โ€‹แ€แ€ฝแ€ฑแ€Ÿแ€ฌ process โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏ Stopped แ€แ€ปแ€„แ€บแ€›แ€„แ€บ แ€กแ€žแ€ฏแ€ถแ€ธแ€•แ€ผแ€ฏแ€œแ€ญแ€ฏแ€ทแ€›แ€แ€šแ€บโ€‹แ€œแ€ฑแ€ฌแ€€แ€บแ€žแ€ฌ แ€žแ€ญแ€‘แ€ฌแ€ธแ€›แ€„แ€บแ€›แ€•แ€ซแ€•แ€ผแ€ฎแ‹

4. ๐’๐’๐’Ž๐’ƒ๐’Š๐’† ๐‘บ๐’•๐’‚๐’•๐’†

Zombie state แ€†แ€ญแ€ฏแ€แ€ฌแ€€โ€‹แ€แ€ฑแ€ฌแ€ท process แ€แ€…แ€บแ€แ€ฏแ€Ÿแ€ฌ stopped แ€–แ€ผแ€…แ€บแ€•แ€ผแ€ฎแ€ธโ€‹แ€”แ€ฑแ€ฌแ€€แ€บแ€•แ€ญแ€ฏแ€„แ€บแ€ธ แ€žแ€ฐแ€ทแ€›แ€ฒแ€ท parent process แ€€ exit status แ€€แ€ญแ€ฏ collect แ€œแ€ฏแ€•แ€บแ€•แ€ผแ€ฎแ€ธ process table แ€€โ€‹แ€”แ€ฑ แ€™แ€–แ€šแ€บแ€›แ€พแ€ฌแ€ธโ€‹แ€•แ€ฑแ€ธแ€แ€„แ€บแ€™แ€พแ€ฌ แ€’แ€ฎ child process แ€Ÿแ€ฌ zombie state แ€™แ€พแ€ฌแ€›แ€พแ€ญโ€‹แ€”แ€ฑแ€™แ€พแ€ฌแ€•แ€ฒแ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹

๐ˆ๐ง๐ญ๐ž๐ซ-๐ฉ๐ซ๐จ๐œ๐ž๐ฌ๐ฌ ๐œ๐จ๐ฆ๐ฆ๐ฎ๐ง๐ข๐œ๐š๐ญ๐ข๐จ๐ง

แ€’แ€ฎแ€กแ€•แ€ญแ€ฏแ€„แ€บแ€ธแ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท แ€…แ€ฌโ€‹แ€›แ€ฑแ€ธแ€žแ€ฐแ€แ€ญแ€ฏแ€ท system แ€‘แ€ฒแ€™แ€พแ€ฌแ€›แ€พแ€ญแ€แ€ฒแ€ท process โ€‹แ€แ€ฝแ€ฑแ€Ÿแ€ฌ แ€กแ€แ€ปแ€„แ€บแ€ธแ€แ€ปแ€„แ€บแ€ธ communicate แ€˜แ€šแ€บแ€œแ€ญแ€ฏแ€œแ€ฏแ€•แ€บแ€€แ€ผแ€œแ€ฒแŠ แ€•แ€ผแ€ฎแ€ธโ€‹แ€แ€ฑแ€ฌแ€ท parent process โ€‹แ€แ€ฝแ€ฑแ€€โ€‹แ€€แ€ฑแ€ฌ แ€žแ€ฐแ€ทแ€›แ€ฒแ€ท แ€žแ€€แ€บแ€†แ€ญแ€ฏแ€„แ€บแ€แ€ฒแ€ท child process โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏแ€˜แ€šแ€บแ€œแ€ญแ€ฏ manage แ€œแ€ฏแ€•แ€บแ€œแ€ฒแ€†แ€ญแ€ฏแ€แ€ฌโ€‹แ€แ€ฝแ€ฑแ€”แ€ฒแ€ทแ€•แ€แ€บแ€žแ€€แ€บแ€แ€ฌแ€€แ€ญแ€ฏโ€‹แ€•แ€ผแ€ฑแ€ฌแ€žแ€ฝแ€ฌแ€ธแ€•แ€ซแ€™แ€šแ€บแ‹ แ€€แ€ปแ€ฝแ€”แ€บโ€‹แ€แ€ฑแ€ฌแ€บแ€แ€ญแ€ฏแ€ท inter-process communication แ€œแ€ฏแ€•แ€บแ€แ€ฒแ€ทโ€‹แ€”แ€ฑแ€›แ€ฌแ€™แ€พแ€ฌ oldest way แ€€โ€‹แ€แ€ฑแ€ฌแ€ท signal แ€•แ€ญแ€ฏแ€ทแ€แ€ฒแ€ทแ€”แ€Šแ€บแ€ธแ€œแ€™แ€บแ€ธแ€•แ€ฒแ€–แ€ผแ€…แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€€แ€ปแ€ฝแ€”แ€บโ€‹แ€แ€ฑแ€ฌแ€บแ€แ€ญแ€ฏแ€ท แ€กโ€‹แ€•แ€ฑแ€ซแ€บแ€™แ€พแ€ฌ โ€‹แ€•แ€ผแ€ฑแ€ฌแ€แ€ฒแ€ทแ€แ€ฒแ€ท signals โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏ user แ€€โ€‹แ€”แ€ฑ kill or pkill command แ€”แ€ฒแ€ทแ€–แ€ผแ€…แ€บโ€‹แ€…แ€ฑ process โ€‹แ€แ€ฝแ€ฑแ€กแ€แ€ปแ€„แ€บแ€ธแ€แ€ปแ€„แ€บแ€ธ แ€€แ€–แ€ผแ€…แ€บโ€‹แ€…แ€ฑแ€•แ€ญแ€ฏแ€ทแ€”แ€ญแ€ฏแ€„แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ฎ signals โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏแ€œแ€€แ€บแ€แ€ถแ€›แ€›แ€พแ€ญแ€แ€ฒแ€ทแ€กแ€แ€ปแ€ญแ€”แ€บแ€™แ€พแ€ฌ แ€’แ€ฎ process or running program โ€‹แ€แ€ฝแ€ฑแ€€แ€žแ€ฐแ€แ€ญแ€ฏแ€ทแ€’แ€ฎ signal แ€€แ€ญแ€ฏ แ€˜แ€ฌแ€œแ€ฏแ€•แ€บแ€›แ€™แ€œแ€ฒแ€†แ€ญแ€ฏแ€แ€ฒแ€ท Default action แ€€แ€ญแ€ฏแ€•แ€ผแ€ฏแ€œแ€ฏแ€•แ€บแ€žแ€ฝแ€ฌแ€ธแ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ซแ€™แ€พแ€™แ€Ÿแ€ฏแ€แ€บแ€€แ€ปแ€ฝแ€”แ€บโ€‹แ€แ€ฑแ€ฌแ€บแ€แ€ญแ€ฏแ€ทแ€€ แ€’แ€ฎ signal แ€€แ€ญแ€ฏแ€›แ€›แ€„แ€บ แ€˜แ€ฌแ€œแ€ฏแ€•แ€บแ€•แ€ซแ€†แ€ญแ€ฏแ€แ€ฒแ€ท handler แ€‘แ€Šแ€บแ€ทแ€‘แ€ฌแ€ธแ€œแ€ญแ€ฏแ€ทแ€œแ€Šแ€บแ€ธแ€›แ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ซแ€™แ€พแ€™แ€Ÿแ€ฏแ€แ€บ แ€’แ€ฎ signal แ€œแ€ฌแ€œแ€Šแ€บแ€ธแ€˜แ€ฌแ€™แ€พแ€™แ€œแ€ฏแ€•แ€บแ€˜แ€ฐแ€ธแ€†แ€ญแ€ฏแ€•แ€ผแ€ฎแ€ธ ignore แ€œแ€ฏแ€•แ€บแ€‘แ€ฌแ€ธแ€œแ€ญแ€ฏแ€ทแ€œแ€Šแ€บแ€ธแ€›แ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ซโ€‹แ€•แ€ฑแ€™แ€šแ€บแ€ทแ€กแ€ฒแ€ทแ€œแ€ญแ€ฏ ignore แ€œแ€ฏแ€•แ€บแ€‘แ€ฌแ€ธแ€œแ€ญแ€ฏแ€ทแ€™แ€›แ€แ€ฒแ€ท signals โ€‹แ€แ€ฝแ€ฑแ€œแ€Šแ€บแ€ธแ€›แ€พแ€ญแ€•แ€ซแ€แ€šแ€บแ‹ แ€ฅแ€•แ€™แ€ฌแ€กแ€ฌแ€ธแ€–แ€ผแ€„แ€บแ€ท SIGSTOP แ€”แ€ฒแ€ท SIGKILL แ€€แ€ญแ€ฏแ€†แ€ญแ€ฏแ€›แ€„แ€บ ignore แ€œแ€ฏแ€•แ€บแ€œแ€ญแ€ฏแ€ทแ€™แ€›แ€•แ€ซแ€˜แ€ฐแ€ธแŠ SIGKILL แ€•แ€ญแ€ฏแ€ทแ€แ€ถแ€›แ€แ€ฒแ€ท process แ€แ€…แ€บแ€แ€ฏแ€Ÿแ€ฌ force kill แ€œแ€ฏแ€•แ€บแ€แ€ถแ€€แ€ญแ€ฏแ€แ€ถแ€›แ€•แ€ซแ€™แ€šแ€บแŠ แ€กแ€ฒแ€ทแ€œแ€ญแ€ฏโ€‹แ€•แ€ผแ€ฑแ€ฌแ€แ€ปแ€„แ€บแ€แ€ฌแ€•แ€ซแ‹ แ€แ€…แ€บแ€แ€ผแ€ฌแ€ธ Inter-Process Communication แ€™แ€พแ€ฌแ€žแ€ฏแ€ถแ€ธแ€แ€ฒแ€ท แ€”แ€Šแ€บแ€ธแ€œแ€™แ€บแ€ธ แ‚แ€แ€ฏแ€กโ€‹แ€€แ€ผแ€ฑแ€ฌแ€„แ€บแ€ธแ€†แ€€แ€บโ€‹แ€•แ€ผแ€ฑแ€ฌแ€žแ€ฝแ€ฌแ€ธแ€•แ€ซแ€™แ€šแ€บแ‹

1. ๐‘บ๐’‰๐’‚๐’“๐’†๐’… ๐’Ž๐’†๐’Ž๐’๐’“๐’š

แ€•แ€‘แ€™ แ€”แ€Šแ€บแ€ธแ€œแ€™แ€บแ€ธแ€แ€…แ€บแ€แ€ฏแ€€โ€‹แ€แ€ฑแ€ฌแ€ท different process แ‚แ€แ€ฏแ€€ แ€žแ€ฐแ€แ€ญแ€ฏแ€ทแ€กแ€แ€ปแ€„แ€บแ€ธแ€แ€ปแ€„แ€บแ€ธ communicate แ€œแ€ฏแ€•แ€บแ€•แ€ผแ€ฎแ€ธ process แ€แ€…แ€บแ€แ€ฏแ€›แ€ฒแ€ท action โ€‹แ€แ€ฝแ€ฑแŠ information โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏแ€แ€…แ€บแ€แ€ผแ€ฌแ€ธ process แ€€แ€žแ€ญโ€‹แ€กแ€ฑแ€ฌแ€„แ€บ memory segment แ€€แ€ญแ€ฏ แ€…แ€ฏแ€žแ€ฏแ€ถแ€ธแ€แ€ฒแ€ท แ€•แ€ฏแ€ถแ€…แ€ถแ€”แ€ฒแ€ท แ€•แ€ผแ€ฏแ€œแ€ฏแ€•แ€บแ€œแ€ญแ€ฏแ€ทแ€›แ€•แ€ซแ€แ€šแ€บแ‹ แ€žโ€‹แ€˜แ€ฑแ€ฌแ€€โ€‹แ€แ€ฑแ€ฌแ€ท process A แ€”แ€ฒแ€ท process Bแ€œแ€ญแ€ฏแ€ทแ€•แ€ฒแ€‘แ€ฌแ€ธแ€•แ€ซโ€‹แ€แ€ฑแ€ฌแ€ทแŠ process A แ€€แ€žแ€ฐแ€œแ€ฏแ€•แ€บแ€แ€ฒแ€ทแ€แ€ฒแ€ท information โ€‹แ€แ€ฝแ€ฑแŠ แ€žแ€ฐแ€žแ€ฏแ€ถแ€ธแ€แ€ฒแ€ทแ€แ€ฒแ€ท computation โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏ memory segment แ€แ€…แ€บแ€แ€ฏแ€‘แ€ฒแ€™แ€พแ€ฌ buffer แ€กโ€‹แ€”แ€ฑแ€”แ€ฒแ€ทแ€žแ€ญแ€™แ€บแ€ธแ€แ€ฒแ€ทแ€•แ€ซแ€แ€šแ€บแŠ process B แ€€ แ€’แ€ฎ information โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏแ€กแ€žแ€ฏแ€ถแ€ธแ€•แ€ผแ€ฏแ€•แ€ผแ€ฎแ€ธ task แ€แ€…แ€บแ€แ€ฏแ€แ€ฏแ€•แ€ผแ€ฏแ€œแ€ฏแ€•แ€บแ€–แ€ญแ€ฏแ€ทแ€œแ€ญแ€ฏแ€กแ€•แ€บแ€œแ€ฌแ€แ€ฒแ€ทแ€กแ€แ€ซ แ€’แ€ฎ shared แ€œแ€ฏแ€•แ€บแ€‘แ€ฌแ€ธแ€แ€ฒแ€ท memory segment แ€‘แ€ฒแ€€แ€žแ€ฝแ€ฌแ€ธแ€šแ€ฐแ€•แ€ผแ€ฎแ€ธแ€žแ€ฏแ€ถแ€ธแ€แ€ฒแ€ทแ€•แ€ฏแ€ถแ€…แ€ถแ€€แ€ญแ€ฏโ€‹แ€•แ€ผแ€ฑแ€ฌแ€แ€ฌแ€•แ€ซแ‹

2. ๐‘ด๐’†๐’”๐’”๐’‚๐’ˆ๐’† ๐‘ท๐’‚๐’”๐’”๐’Š๐’๐’ˆ

แ€’แ€ฏแ€แ€ญแ€šแ€”แ€Šแ€บแ€ธแ€œแ€™แ€บแ€ธแ€€โ€‹แ€แ€ฑแ€ฌแ€ท process แ€กแ€แ€ปแ€„แ€บแ€ธแ€แ€ปแ€„แ€บแ€ธแ€€แ€ผแ€ฌแ€ธแ€™แ€พแ€ฌ โ€‹แ€•แ€ฑแ€ธแ€•แ€ญแ€ฏแ€ทแ€แ€ปแ€„แ€บแ€แ€ฒแ€ท specific information โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏ message แ€แ€…แ€บแ€แ€ฏแ€กโ€‹แ€”แ€ฑแ€”แ€ฒแ€ท header, body แ€แ€ฝแ€ฒแ€•แ€ผแ€ฎแ€ธ communication link แ€แ€…แ€บแ€แ€ฏแ€€โ€‹แ€”แ€ฑ แ€กแ€•แ€ผแ€”แ€บแ€กแ€œแ€พแ€”แ€บ แ€†แ€€แ€บแ€žแ€ฝแ€šแ€บแ€แ€ฒแ€ทแ€•แ€ฏแ€ถแ€…แ€ถแ€•แ€ซแ‹ Communication link โ€‹แ€”แ€ฑแ€›แ€ฌแ€™แ€พแ€ฌ direct communication แ€”แ€ฒแ€ท indirect communication แ€œแ€ญแ€ฏแ€ท แ‚แ€™แ€ปแ€ญแ€ฏแ€ธแ€‘แ€€แ€บแ€€แ€ฝแ€ฒแ€•แ€ผแ€ฎแ€ธ direct communication แ€†แ€ญแ€ฏแ€แ€ฌแ€€โ€‹แ€แ€ฑแ€ฌแ€ท sender แ€€ message แ€•แ€ญแ€ฏแ€ทแ€แ€ฒแ€ทแ€กแ€แ€ปแ€ญแ€”แ€บแ€™แ€พแ€ฌ แ€˜แ€šแ€บ receiver แ€†แ€ฎแ€€แ€ญแ€ฏแ€•แ€ญแ€ฏแ€ทแ€™แ€šแ€บแ€†แ€ญแ€ฏแ€แ€ฌแ€€แ€ญแ€ฏ แ€•แ€ฏแ€ถโ€‹แ€žแ€ฑแ€žแ€แ€บแ€™แ€พแ€แ€บโ€‹แ€•แ€ฑแ€ธแ€œแ€ญแ€ฏแ€€แ€บแ€แ€ฌแ€€แ€ญแ€ฏโ€‹แ€•แ€ผแ€ฑแ€ฌแ€แ€ปแ€„แ€บแ€แ€ฌแ€•แ€ซแ‹ Indirect communication แ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท process โ€‹แ€แ€ฝแ€ฑแ€Ÿแ€ฌ แ€กแ€แ€ปแ€„แ€บแ€ธแ€แ€ปแ€„แ€บแ€ธ message share แ€”แ€ญแ€ฏแ€„แ€บแ€–แ€ญแ€ฏแ€ทแ€กแ€แ€ฝแ€€แ€บ mailbox แ€แ€…แ€บแ€แ€ฏแ€€แ€ญแ€ฏ share แ€žแ€ฏแ€ถแ€ธแ€›แ€แ€šแ€บแ€ทแ€•แ€ฏแ€ถแ€€แ€ญแ€ฏโ€‹แ€•แ€ผแ€ฑแ€ฌแ€แ€ปแ€„แ€บแ€แ€ฌแ€•แ€ซแ‹ mailbox แ€†แ€ญแ€ฏแ€แ€ฌแ€€แ€ญแ€ฏ port แ€แ€…แ€บแ€แ€ฏแ€กโ€‹แ€”แ€ฑแ€”แ€ฒแ€ทแ€™แ€ผแ€„แ€บแ€€แ€ผแ€Šแ€บแ€ทแ€”แ€ญแ€ฏแ€„แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ฎโ€‹แ€”แ€ฑแ€›แ€ฌแ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท one to one communication แ€™แ€Ÿแ€ฏแ€แ€บแ€•แ€ฒ multiple senders แ€€โ€‹แ€”แ€ฑ receiver แ€แ€…แ€บโ€‹แ€šแ€ฑแ€ฌแ€€แ€บแ€†แ€ฎแ€€แ€ญแ€ฏ message โ€‹แ€•แ€ฑแ€ธแ€•แ€ญแ€ฏแ€ทแ€แ€ฌแ€œแ€Šแ€บแ€ธแ€–แ€ผแ€…แ€บแ€”แ€ญแ€ฏแ€„แ€บแ€•แ€ซแ€แ€šแ€บแ‹ แ€’แ€ฎ share แ€œแ€ฏแ€•แ€บแ€‘แ€ฌแ€ธแ€แ€ฒแ€ท mailbox แ€€แ€ญแ€ฏโ€‹แ€แ€ฑแ€ฌแ€ท receiver process แ€˜แ€€แ€บแ€€ create แ€œแ€ฏแ€•แ€บแ€แ€ฌแ€–แ€ผแ€…แ€บแ€•แ€ผแ€ฎแ€ธ receiver process terminate แ€œแ€ฏแ€•แ€บแ€žแ€ฝแ€ฌแ€ธแ€แ€ปแ€ญแ€”แ€บแ€™แ€พแ€ฌ แ€แ€…แ€บแ€แ€ซแ€‘แ€ฒ destroy แ€œแ€ฏแ€•แ€บแ€แ€ฒแ€ทแ€œแ€ญแ€ฏแ€ทแ€›แ€•แ€ซแ€แ€šแ€บแ‹ แ€€แ€ฒโ€‹แ€•แ€ผแ€ฑแ€ฌแ€แ€ฌโ€‹แ€แ€ฝแ€ฑแ€œแ€Šแ€บแ€ธแ€™แ€ปแ€ฌแ€ธแ€žแ€ฝแ€ฌแ€ธแ€•แ€ผแ€ฎแ€‘แ€„แ€บแ€•แ€ซแ€แ€šแ€บแŠ แ€’แ€ฎโ€‹แ€”แ€ฑแ€ทแ€™แ€พแ€ฌโ€‹แ€แ€ฑแ€ฌแ€ท แ€’แ€ฎโ€‹แ€œแ€ฑแ€ฌแ€€แ€บแ€”แ€ฒแ€ทแ€•แ€ฒแ€›แ€•แ€บแ€•แ€ผแ€ฎแ€ธ โ€‹แ€”แ€ฑแ€ฌแ€€แ€บแ€แ€…แ€บโ€‹แ€”แ€ฑแ€ทแ€™แ€พแ€ฌโ€‹โ€‹แ€แ€ฑแ€ฌแ€ท แ€€แ€ปแ€ฝแ€”แ€บโ€‹แ€แ€ฑแ€ฌแ€บแ€แ€ญแ€ฏแ€ท CPU context switching แ€†แ€ญแ€ฏแ€แ€ฒแ€ทโ€‹แ€แ€ฑแ€ซแ€„แ€บแ€ธแ€…แ€ฅแ€บแ€”แ€ฒแ€ท แ€…แ€•แ€ผแ€ฎแ€ธ 1 core แ€•แ€ฒแ€•แ€ซแ€แ€ฒแ€ท CPU แ€แ€…แ€บแ€แ€ฏแ€€ multiple processes โ€‹แ€แ€ฝแ€ฑแ€€แ€ญแ€ฏแ€˜แ€šแ€บแ€œแ€ญแ€ฏ handle แ€œแ€ฏแ€•แ€บแ€œแ€ฒแ€†แ€ญแ€ฏแ€แ€ฌ แ€‘แ€•แ€บแ€™แ€ถโ€‹แ€•แ€ผแ€ฑแ€ฌแ€žแ€ฝแ€ฌแ€ธแ€•แ€ซแ€™แ€šแ€บแ‹

0
Subscribe to my newsletter

Read articles from Hein Htet Win directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Hein Htet Win
Hein Htet Win

I am a DevOps Engineer from Yangon, Myanmar. I fell in love with automation and CI/CD. I also enjoy using open-source software and regularly contribute to and participate on webinars. In my spare time, I enjoy playing games with my friends in addition to my job.