Unix, Linux ์—์„œ kill ๋ช…๋ น์–ด๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

TL;DR

kill -9 ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ์‹œ์Šคํ…œ์— ์•…์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  kill -INT ๋‚˜ kill -TERM ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.


๋“ค์–ด๊ฐ€๋ฉฐ

์‹œ์Šคํ…œ ์ž‘์—…ํ•˜๋˜ ์ง์›์ด java ๊ด€๋ จ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋ฅผ kill -9 ๋กœ ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์™œ ์ด๋ ‡๊ฒŒ ํ•˜๋Š”์ง€ ๋ฌผ์–ด๋ณด๋‹ˆ "ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์‹œ ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ๊ฐ€์š”?" ๋ผ๋Š” ๋‹ต๋ณ€์ด ๋Œ์•„์™”์Šต๋‹ˆ๋‹ค.


๊ฒ€์ƒ‰์„ ํ•ด ๋ณด๋‹ˆ ๋งŽ์€ ๋ธ”๋กœ๊ทธ๋“ค์ด ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์‹œ kill -9  ๋กœ ์ฒ˜๋ฆฌํ•˜๋ผ๊ณ  ์„ค๋ช…ํ•˜๊ณ  ์žˆ์–ด์„œ kill ๋ช…๋ น์˜ ์˜๋ฏธ ๋ฐ ์•ˆ์ „ํ•˜๊ฒŒ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋ด…๋‹ˆ๋‹ค.


signal ๊ณผ event

kill ์€ ํ”„๋กœ์„ธ์Šค์— ์‹œ๊ทธ๋„์— ๋ณด๋‚ด๋Š” ๋ช…๋ น์–ด๋กœ signal ์„ ๋ฐ›์€ ํ”„๋กœ์„ธ์Šค์˜ ๊ธฐ๋ณธ ๋™์ž‘์ด ์ข…๋ฃŒ์ด๊ธฐ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๋ช…๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด์ œ๋Š” signal ์ข…๋ฅ˜๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๊ธฐ๋ณธ ๋™์ž‘์ด ์ข…๋ฃŒ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ kill ๋ณด๋‹ค๋Š” send_signal ์ด ๋” ์ ํ•ฉํ•œ ์ด๋ฆ„์ด๋ฉฐ ์ด๋Ÿฐ ๋งฅ๋ฝ์„ ๋ชจ๋ฅด๋ฉด ๋ช…๋ น์–ด์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์˜คํ•ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


signal ์€ software interrupt ์˜ ์ผ์ข…์œผ๋กœ ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ ํ‚ค(Ctrl + C)๋ฅผ ๋ˆŒ๋ €๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ–ˆ์„ ๊ฒฝ์šฐ๊ฐ€ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์˜ˆ์ด๋ฉฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋งž๋Š” signal ์„ ์ „์†ก๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


์‹œ๊ทธ๋„์€ ์ˆซ์ž 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ์ˆซ์ž๋Š” ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ ์˜๋ฏธ์žˆ๋Š” ์ด๋ฆ„์œผ๋กœ๋„ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๋ฆฌ๋ˆ…์Šค์˜ ๋ชฉ๋ก์€ /usr/include/signal.h ์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ๋„ ์ „์ฒด ์‹œ๊ทธ๋„ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

$ kill -l

1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR

์‹œ๊ทธ๋„์˜ ์ˆซ์ž์™€ ์˜๋ฏธ๋Š” ์œ ๋‹‰์Šค์˜ ํ‘œ์ค€์ค‘ ํ•˜๋‚˜์ธ POSIX(Portable Operating System Interface) ์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


kill ๋ช…๋ น์–ด ๋’ค์— ์‹œ๊ทธ๋„์˜ ์ˆซ์ž ๋˜๋Š” SIG ๋ฅผ ๋บ€ ์ด๋ฆ„(์˜ˆ: SIGINT ์ผ ๊ฒฝ์šฐ INT)์„ ์ฃผ๊ณ  ํ”„๋กœ์„ธ์Šค id ๋ฅผ ์ฃผ๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ์‹œ๊ทธ๋„์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ฆ‰ ์•„๋ž˜ 2๊ฐœ์˜ ๋ช…๋ น์€ ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ kill -INT 123
$ kill -2 123

kill ๋ช…๋ น์–ด ๋’ค์— ์‹œ๊ทธ๋„ ์ด๋ฆ„์ด๋‚˜ ์ˆซ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด TERM(15๋ฒˆ) signal ์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.


signal handler

signal ๋ฐœ์ƒ์€ ๋น„๋™๊ธฐ ์ž‘์—…์ด๋ฉฐ ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ ํŠน์ • ์‹œ๊ทธ๋„์„ ์ˆ˜์‹ ํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ํ•จ์ˆ˜(์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ)์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํŠน๋ณ„ํžˆ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ์ปค๋„์— ๊ธฐ๋ณธ ์ •์˜๋œ ์•ก์…˜์„ ์‹คํ–‰ํ•˜๋ฉฐ ๊ธฐ๋ณธ ์ •์˜ ์•ก์…˜์€ ์‹œ๊ทธ๋„์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ๊ธฐ๋ณธ ์ •์˜๋œ ์•ก์…˜์€ ๋‹ค์Œ ํ‘œ์ฒ˜๋Ÿผ ์ด 5๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.


action ๋ช…๊ธฐ๋ณธ ๋™์ž‘
TERM์‹œ๊ทธ๋„์„ ์ˆ˜์‹ ํ•œ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
IGN์‹œ๊ทธ๋„ ๋ฌด์‹œ
CORE์‹œ๊ทธ๋„์„ ์ˆ˜์‹ ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด์„œ ์ฝ”์–ด ๋คํ”„(core dump) ํŒŒ์ผ ์ƒ์„ฑ
STOP์‹œ๊ทธ๋„์„ ์ˆ˜์‹ ํ•œ ํ”„๋กœ์„ธ์Šค ์ •์ง€
CONT์ค‘์ง€๋œ ํ”„๋กœ์„ธ์Šค ์žฌ์‹œ์ž‘


ํ”„๋กœ์„ธ์Šค์— ์‹œ๊ทธ๋„์„ ๋ณด๋‚ด๋Š” ๋ช…๋ น์–ด๊ฐ€ kill ์ธ ์ด์œ ๋Š” ํฌ๊ฒŒ ๋‹ค์Œ 2๊ฐ€์ง€๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  1. ์‹œ๊ทธ๋„ ์ข…๋ฅ˜๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  kill ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ์ „์†ก๋˜๋Š” ๊ธฐ๋ณธ ์‹œ๊ทธ๋„์€ TERM signal
  2. signal handler ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋ณธ ์•ก์…˜์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ


 signal ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์ œ
#include <stdio.h>
#include <stdlib.h>
#include <signal.h> // sigaction(), sigsuspend(), sig*()
#include <unistd.h> // alarm()

void handle_signal(int signal);

int main() {
    struct sigaction sa;

    sa.sa_handler = &handle_signal;
    sa.sa_flags = SA_RESTART;
    sigfillset(&sa.sa_mask);

    // Intercept SIGHUP and SIGINT
    if (sigaction(SIGHUP, &sa, NULL) == -1) {
        perror("Error: cannot handle SIGHUP"); // Should not happen
    }

    if (sigaction(SIGUSR1, &sa, NULL) == -1) {
        perror("Error: cannot handle SIGUSR1"); // Should not happen
    }

    // Will always fail, SIGKILL is intended to force kill your process
    if (sigaction(SIGKILL, &sa, NULL) == -1) {
        perror("Cannot handle SIGKILL"); // Will always happen
        printf("You can never handle SIGKILL anyway...\n");
    }

    if (sigaction(SIGINT, &sa, NULL) == -1) {
        perror("Error: cannot handle SIGINT"); // Should not happen
    }
    for (;;) {
        printf("\nSleeping for ~3 seconds\n");
        do_sleep(3); // Later to be replaced with a SIGALRM
    }
}

void handle_signal(int signal) {
    const char *signal_name;
    sigset_t pending;

    // Find out which signal we're handling
    switch (signal) {
        case SIGHUP:
            signal_name = "SIGHUP";
            break;
        case SIGUSR1:
            signal_name = "SIGUSR1";
            break;
        case SIGINT:
            printf("Caught SIGINT, exiting now\n");
            exit(0);
        default:
            fprintf(stderr, "Caught wrong signal: %d\n", signal);
            return;
    }

    printf("Caught %s, sleeping for ~3 seconds\n"
           "Try sending another SIGHUP / SIGINT / SIGALRM "
           "(or more) meanwhile\n", signal_name);
}


์™œ kill -9 ๋ฅผ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€?


์œ„์—์„œ ์–˜๊ธฐํ•œ๋Œ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” signal ์ข…๋ฅ˜ ๋ณ„๋กœ handler ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฐœ๋…์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์˜ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•˜๋Š” signal (INT, HUP, TERM ๋“ฑ)์„ ๋ฐ›์œผ๋ฉด ์‚ฌ์šฉํ–ˆ๋˜ ๋ฆฌ์†Œ์Šค(ํŒŒ์ผ, ์†Œ์ผ“, DB ์—ฐ๊ฒฐ๋“ฑ)๋ฅผ  ๋‹ซ๊ณ  ์ €์žฅํ•˜๋Š” cleanup ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ด๋ฅผ ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.


๋ฌธ์ œ๋Š” ์œ ๋‹‰์Šค์˜ ํ‘œ์ค€์ƒ handler ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์—†๋Š” 2๊ฐœ์˜ ์‹œ๊ทธ๋„์ด ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ SIGKILL(9) ๊ณผ  SIGSTOP(19) ์ด๋ฉฐ kill -9 ๋ช…๋ น์–ด๋Š” KILL signal ์„ ๋ณด๋‚ด๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.


์ฆ‰ kill -9 ๋กœ signal ์„ ๋ณด๋‚ด๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌํ˜„ํ•œ ์ข…๋ฃŒ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ๋ฒ„๋ฆฌ๋ฏ€๋กœ ๋ฐ์ดํƒ€๊ฐ€ ์œ ์‹ค๋˜๊ฑฐ๋‚˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œ๋Œ€๋กœ ์•ˆ ๋‹ซํžˆ๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฐœ์ธ์ ์œผ๋กœ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋จผ์ € kill -TERM PID ๋‚˜ kill -INT PID ๊ฐ™์ด ์ข…๋ฃŒ๋ฅผ ์˜๋ฏธํ•˜๋Š” signal ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ „์†กํ•ด ์ฃผ๋Š” ๊ฒƒ์ด๋ฉฐ ์ œ๋Œ€๋กœ ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ๋ณดํ†ต cleanup ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ข…๋ฃŒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


Java JRE ๋„ TERM ์‹œ๊ทธ๋„์ด๋ฉด ๊นจ๋—ํ•˜๊ฒŒ ์ข…๋ฃŒ๋˜๋Š”๋ฐ ๊ฐ€๋” ๋ฉ์น˜๊ฐ€ ํฐ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ(์ œ๊ฐ€ ๋ธ”๋กœ๊ทธ๋กœ ์‚ฌ์šฉํ•˜๋Š” Confluence ๊ฐ™์€)๋“ฑ์€ ์ข…๋ฃŒ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋Ÿฐ ๊ฒฝ์šฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์„ ๋‘๊ณ   ๋‹ค์‹œ INT ๋‚˜ TERM ์‹œ๊ทธ๋„์„ ๋‹ค์‹œ ์ „์†กํ•ด ์ฃผ๋ฉด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ฌ ๊ฒฝ์šฐ ์ด๋ฆ„์œผ๋กœ ์‹œ๊ทธ๋„์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” killall ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ awk script ๋ฅผ ์ด์šฉํ•ด์„œ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


$ ps -eaf httpd|grep -v grep|awk '{print "kill -TERM "$2}' | sh -x


๋ชจ๋“  child process ๊นŒ์ง€ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด StackOverflow์˜ Best way to kill all child processes ์“ฐ๋ ˆ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

 Click here to expand...
์œ„ ์“ฐ๋ ˆ๋“œ์—์„œ ๋ฐœ์ทŒํ•œ killtree.sh
#!/bin/bash

killtree() {
    local _pid=$1
    local _sig=${2:-TERM}
    kill -stop ${_pid} # needed to stop quickly forking parent from producing child between child killing and parent killing
    for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
        killtree ${_child} ${_sig}
    done
    kill -${_sig} ${_pid}
}

if [ $# -eq 0 -o $# -gt 2 ]; then
    echo "Usage: $(basename $0) <pid> [signal]"
    exit 1
fi

killtree $@


์‚ฌ์šฉ์ž ์ •์˜ ์‹œ๊ทธ๋„

kill -l ๋กœ ๋ณด๋ฉด SIGUSR1 ๊ณผ SIGUSR2 ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด ์‹œ๊ทธ๋„์˜ ์šฉ๋„๋Š” ์‚ฌ์šฉ์ž ์ •์˜์šฉ์ž…๋‹ˆ๋‹ค.

์ฆ‰ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ € ์–ด๋–ค ์šฉ๋„๋กœ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋ฉด ๋˜๋ฉฐ ์ด์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ์šฉ๋„๊ฐ€ ๊ฐ๊ฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.


nginx ์˜ ๊ฒฝ์šฐ USR1 ์‹œ๊ทธ๋„์„ ๋ฐ›์œผ๋ฉด ๋กœ๊ทธ ํŒŒ์ผ์„ ๋‹ค์‹œ open ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์‚ฌ์šฉ์ž๊ฐ€ ํญ์ฃผํ•˜๋Š” ์›น ์„œ๋ฒ„์ผ ๊ฒฝ์šฐ ์Œ“์ด๋Š” ๋กœ๊ทธ ํŒŒ์ผ ์šฉ๋Ÿ‰์ด ์ƒ๋‹นํ•˜๋ฏ€๋กœ log rotate ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ธฐ์กด ๋กœ๊ทธ ํŒŒ์ผ์„ ๋‚ ์ž๋ช…๋“ฑ์„ ๋ถ™์—ฌ์„œ rename ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.


๋ฆฌ๋ˆ…์Šค์˜ ํŠน์„ฑ์ƒ ์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ ๋กœ๊ทธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋„ nginx ๋Š” rename ๋œ ๊ธฐ์กด ๋กœ๊ทธ ํŒŒ์ผ์„ ์—ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์žฌ๊ตฌ๋™ํ•˜๋ฉด ํ•ด๊ฒฐ๋˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์žฌ๊ตฌ๋™ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉฐ ๊ธฐ์กด์— ์—ฐ๊ฒฐํ•œ ํด๋ผ์ด์–ธํŠธ๋“ค์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋Ÿฐ ๊ฒฝ์šฐ systemctl ์ด๋‚˜ service ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ๊ตฌ๋™ํ•˜์ง€ ๋ง๊ณ  USR1 ์‹œ๊ทธ๋„์„ ์ „์†กํ•˜๋ฉด nginx ๋Š” ๋กœ๊ทธ ํŒŒ์ผ์„ ๋‹ค์‹œ ์˜คํ”ˆํ•˜๋ฏ€๋กœ log rotate ๊ธฐ๋Šฅ์ด ์ •์ƒ์ž‘๋™๋ฉ๋‹ˆ๋‹ค. (http://nginx.org/en/docs/control.html ์ฐธ๊ณ ํ•˜์„ธ์š”)

$ killall -USR1 nginx


์•„ํŒŒ์น˜ httpd ๋Š” prefork ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ USR1 ์„ ๋ฐ›์œผ๋ฉด ์„ค์ • ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฝ๊ณ  ๋กœ๊ทธ ํŒŒ์ผ๋„ ๋‹ค์‹œ ์˜คํ”ˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ   ๋ชจ๋“  ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ˜„์žฌ ์š”์ฒญ์ด ๋๋‚˜๋ฉด ์ข…๋ฃŒํ•˜๋„๋ก ์ง€์‹œํ•˜๊ณ  ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ƒˆ๋กœ์šด ์„ค์ •๊ณผ ๋กœ๊ทธ ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.


๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•„ํŒŒ์น˜ ์›น ์„œ๋ฒ„๋„ log rotate ๋‚˜ ์„ค์ • ํŒŒ์ผ ๋ณ€๊ฒฝ์‹œ ์žฌ๊ตฌ๋™์„ ํ•˜์ง€ ๋ง๊ณ  USR1 ๋ฅผ ์ „์†กํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ฐ™์ด ๋ณด๊ธฐ

์ฐธ๊ณ 

  • Unix signal handling example in C, SIGINT, SIGALRM, SIGHUP...

     Click here to expand...