ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

Signal

  • ์ธํ„ฐ๋ŸฝํŠธ๋Š” ์–ธ์ œ ๋ฐœ์ƒํ• ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ด๋ฅผ ๋น„๋™๊ธฐ์ (Asynchronous) ์ด๋ฒคํŠธ๋ผ๊ณ  ํ•˜๋ฉฐ, ์‹œ๊ทธ๋„์€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.
  • ์ธํ„ฐ๋ŸฝํŠธ๋Š” ํฌ๊ฒŒ H/W, S/W ์ธํ„ฐ๋ŸฝํŠธ๋กœ ๋‚˜๋‰œ๋‹ค.
    • ์‹œ๊ทธ๋„์€ S/W ์ธํ„ฐ๋ŸฝํŠธ์ด๋‹ค.
  • ์‹œ๊ทธ๋„ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋”๋ผ๋„, ์‹œ๊ทธ๋„์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌด์‹œ๋œ๋‹ค.
    • ๋‹จ `SIGKILL`, `SIGSTOP`์€ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋‹ค.
    • ์‹œ๊ทธ๋„์˜ ์ข…๋ฅ˜๋Š” `kill -l`์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • fork, exec์— ๋”ฐ๋ผ ์‹œ๊ทธ๋„์€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • fork๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ทธ๋กœ ๋ณต์ œํ•˜๋ฏ€๋กœ, ๋™์ผํ•œ ์‹œ๊ทธ๋„์„ ์ƒ์†๋ฐ›๋Š”๋‹ค.
    • exec์˜ ๊ฒฝ์šฐ SIGTERM์€ ์ƒ์†๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

 

SIGKILL

#!/bin/bash

if [ -z $1 ]; then
	echo "Usage: ./kill_process <Process Name>"
    exit
fi

PID=ps -eaf | grep $1 | grep -v grep | awk '{printf $2}'

if [[ "" != "$PID" ]]; then
	kill -9 $PID
fi

 ์œ„์™€ ๊ฐ™์ด shell์„ ์ƒ์„ฑํ•˜๋ฉด, ํŠน์ • ์ด๋ฆ„์œผ๋กœ ๋™์ž‘ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

Signal Handler

#include <signal.h>

int term_proc;

void signal_handler(int sig_num)
{
    term_proc = 1;
}

int main()
{
    // fork
    
    signal(SIGTERM, signal_handler)
    
    while(!term_proc)
    {
        // ์ฒ˜๋ฆฌํ•  ๋™์ž‘
    }
}

 ์ผ๋ฐ˜์ ์œผ๋กœ kill [pid]๋ฅผ ์ž…๋ ฅํ•˜๋ฉด `kill -15`, ์ฆ‰ SIGTERM๊ณผ ๊ฐ™๋‹ค. ๋”ฐ๋ผ์„œ, SIGTERM์— ๋Œ€ํ•œ ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์†์ ์œผ๋กœ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด while๋ฌธ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ while๋ฌธ์˜ ์กฐ๊ฑด์„ signal์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•˜๋ฉด, kill์„ ํ†ตํ•ด์„œ ์ƒ์„ฑํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.

(signal ํ•จ์ˆ˜์˜ ์ธ์ž๋Š” ์‹œ๊ทธ๋„์˜ ์ข…๋ฅ˜์™€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•จ์ˆ˜์˜ ์‹œ์ž‘ ์ฃผ์†Œ์ด๋‹ค.)

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ™‹โ€โ™‚๏ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด > C' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

C: IPC  (0) 2021.06.13
C: ํŒŒ์ผ ๋‹ค๋ฃจ๊ธฐ  (0) 2021.06.12
C: thread safe and reentrant  (0) 2021.01.26
C: Memory Layout of C Programs  (0) 2021.01.26
C: Storage class specifier  (0) 2020.11.27
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€