전자책 출간 알림 [마이크로서비스패턴 쉽게 개발하기]

티스토리 뷰

container로 실습하기

jobs, fg, bg

jobs는 실행중인 job목록을 보는 명령입니다.
'fg %<job번호>'로 특정 job을 foreground로 실행할 수 있고, 'bg %<job번호>'로 특정 job을 background로 실행할 수 있습니다.
forground job으로 실행한 후 CTRL-z를 누르면 pause이고, CTRL-c를 누르면 terminate입니다.

실습을 위해 아래 내용으로 shell을 작성하십시오.

sh-4.2# cd ~/tmp
sh-4.2# vi control


#! /bin/bash
while true;
  do echo -n "$@ " >> ./control_outfile
  sleep 1
done

sh-4.2# chmod +x control

그리고, 아래와 같은 순서로 테스트를 하면서 이해해 보십시오.

명령 실행 후 조금 이따가 ctrl-z를 눌러 job을 중지합니다.  
sh-4.2# ./control job1
^Z
[1]+  Stopped(SIGTSTP)        ./control job1
sh-4.2# ./control job2
^Z
[2]+  Stopped(SIGTSTP)        ./control job2

결과 파일을 보면 2개 job의 결과가 기록된걸 볼 수 있습니다.  
sh-4.2# cat control_outfile
job1 job1 job1 job1 job2 job2 job2 sh-4.2#

jobs명령어로 job목록을 봅니다.  
sh-4.2# jobs
[1]-  Stopped(SIGTSTP)        ./control job1
[2]+  Stopped(SIGTSTP)        ./control job2
sh-4.2#

job1은 background로 실행합니다.  
sh-4.2# bg %1
[1] ./control job1 &

job2는 foreground로 실행합니다. 조금 후 ctrl-z로 다시 중지합니다.  
sh-4.2# fg %2
./control job2
^Z
[2]+  Stopped(SIGTSTP)        ./control job2

결과파일을 보면 내용이 추가된걸 볼 수 있습니다.  
sh-4.2# cat control_outfile
job1 job1 job1 job1 job2 job2 job2 job1 job1 job1 job1 job1 job1 job2 job1 job2 job1 job2 job1 job1 job1 job1 job1 job1 job1 job1 sh-4.2#

ps명령어로 실행중인 control process를 찾습니다.  
sh-4.2# ps -ef | grep control
root       433    19  0 01:27 pts/1    00:00:00 /bin/bash ./control job1
root       438    19  0 01:27 pts/1    00:00:00 /bin/bash ./control job2
root       474    19  0 01:28 pts/1    00:00:00 grep control

kill명령어로 process를 없앱니다.  
sh-4.2# kill -9 433 438

jobs명령으로 보면 killed로 나왔다가 조금 이따 다시 쳐 보면 아예 job리스트가 안 나옵니다.  
sh-4.2# jobs
[1]-  Killed                  ./control job1
[2]+  Killed                  ./control job2
sh-4.2# jobs

kill

kill명령어가 보낼 수 있는 signal 리스트입니다.

[root@bastion system]# 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
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX

아래와 같이 실행중인 프로세스를 중지하고 재시작할 수 있습니다.

sh-4.2# ./control job1&
[1] 891
sh-4.2# ps -ef | grep control
root       891    19  0 01:49 pts/1    00:00:00 /bin/bash ./control job1
root       902    19  0 01:49 pts/1    00:00:00 grep control
sh-4.2# jobs
[1]+  Running                 ./control job1 &
sh-4.2# kill -19 891 또는 kill -STOP 891
sh-4.2# jobs
[1]+  Stopped(SIGSTOP)        ./control job1
sh-4.2# kill -18 891 또는 kill -CONT 891
sh-4.2# jobs
[1]+  Running                 ./control job1 &
sh-4.2# kill -9 891
sh-4.2# jobs
[1]+  Killed                  ./control job1

TIP: kill -9로 종료하지 말고 kill -2 또는 -INT 와 kill -15 또는 -TERM으로 안전하게 종료하세요.

-9(SIGKILL)에 대해서는 어플리케이션에서 종료handler를 수행시킬 수 없습니다.(linux/unix의 OS적 특성)
-2와 -15로 프로세스를 종료시키면 어플리케이션의 종료handler가 동작하기 때문에 보다 안전하게 프로세스를 종료시킬 수 있습니다.

[root@bastion tmp]# kill -INT 29662  29665 29671
[root@bastion tmp]# jobs
[1]   Running                 ./control job1 &
[2]-  Running                 ./control job2 &
[3]+  Running                 ./control job3 &
[root@bastion tmp]# kill -TERM 29662  29665 29671
[root@bastion tmp]# jobs
[1]   Terminated              ./control job1
[2]-  Terminated              ./control job2
[3]+  Terminated              ./control job3
[root@bastion tmp]# jobs
[root@bastion tmp]#

pkill

pkill은 명령어 이름이나 부모PID로 한꺼번에 프로세스를 죽이는 명령입니다.

sh-4.2# ps -ef | grep control
root       863    19  0 01:45 pts/1    00:00:00 /bin/bash ./control job1
root       867    19  0 01:45 pts/1    00:00:00 /bin/bash ./control job2
root       869    19  0 01:45 pts/1    00:00:00 /bin/bash ./control job3
root       889    19  0 01:46 pts/1    00:00:00 grep control
sh-4.2# pkill -9 control
[1]   Killed                  ./control job1
[2]-  Killed                  ./control job2
[3]+  Killed                  ./control job3

uptime

uptime은 cpu의 평균 사용량을 제공합니다.
아래 load average의 3개 값은 앞에서부터 1분, 5분, 15분간의 CPU사용평균입니다. 비율로는 16%, 33%, 20%가 됩니다.

[root@bastion ~]# uptime
 23:27:18 up 23:27,  2 users,  load average: 0.16, 0.33, 0.20

그런데 CPU가 1개가 아닌 여러개일것이므로 CPU사용율을 계산하려면 CPU갯수를 알아야 합니다.
lscpu라는 명령을 이용하면 cpu에 대한 제반 정보가 나옵니다.

[root@bastion ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 79
Model name:            Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz
Stepping:              1
CPU MHz:               2099.892
BogoMIPS:              4200.09
Hypervisor vendor:     Xen
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              40960K
NUMA node0 CPU(s):     0-3

cpu갯수가 4개이므로 CPU사용률은 아래와 같이 계산됩니다.

1분평균: 16% / 4 = 4%
5분평균: 33% / 4 = 8% (about)
15분평균: 20% / 4 = 5%

다른 Terminal에 메시지 보내기

w명령으로 이 머신에 접속한 terminal 리스트를 볼 수 있습니다.
특정 terminal에 'echo "메시지" > /dev/<TTY>' 와 같이 메시지를 보낼수 있습니다.

[root@bastion tmp]# w
 01:20:40 up 1 day,  1:20,  4 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    211.250.162.208  23:17    0.00s  0.27s  0.00s w
root     pts/1    211.250.162.208  23:20    3:44   0.10s  0.10s -bash
root     pts/2    211.250.162.208  01:12    6:56   0.09s  0.08s vim /etc/dnsmasq.conf
root     pts/3    211.250.162.208  00:34    2:32   0.04s  0.04s -bash

[root@bastion tmp]# echo "hello, please close All terminal immediatly." > /dev/pts/1
댓글

전자책 출간 알림 [마이크로서비스패턴 쉽게 개발하기]