Published Book on Amazon
All of IOT
Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1 |
|
All of IOT
Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2 |
출판된 한글판 도서
최신 라즈베리파이(Raspberry Pi)로 시작하는 사
물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상) |
|
최신 라즈베리파이(Raspberry Pi)로 시작하는 사
물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하) |
Original Book Contents
19.1.2 process 죽이기
현재 실행되고 있는 process의 처리가 더 이상 필요 없거나, process의 진행상태에 문제가 있는 경우 해당 process를 지정하여 처리를 중단할 수 있다.
19.1.2.1 "kill" 명령 - PID를 이용한 process 종료
시스템에 실행되고 있는 process를 종료하도록 시스템에 지시하는 것이 "kill" 명령이다.
[명령 형식]
kill [ options ] <signal> <PID> |
[명령 개요]
■ 현재 실행되고 있는 process를 종료시킨다.
■ user 권한 -- 일반 user.
[상세 설명]
"kill" 명령은 대상이 되는 process를 직접적으로 처리하는 것이 아니라 해당 process에 특정 처리를 하라는 signal을 보내기만 하고, signal에 해당하는 작업을 실제로 하는 것은 그 signal을 받은 process의 책임이다. 따라서 해당 process가 signal을 받고 아무 일도 하지 않으면 signal을 보낸 효과가 없다.
Linux에서 사용할 수 있는 signal은 모두 64가지가 있는데, 주요한 signal은 다음과 같은 것이 있다.
signal no. | signal code | 설명 |
1 | SIGHUP | hang-up. 현재 연결 종료. 통상 재초기화할 때 사용한다 |
2 | SIGINT | 초기화 |
3 | SIGQUIT | 정상 종료 |
4 | SIGILL |
|
5 | SIGTRAP |
|
6 | SIGABRT | Abort |
7 | SIGBUS |
|
8 | SIGFPE |
|
9 | SIGKILL | Application을 종료 |
10 | SIGUSR1 |
|
11 | SIGSEGV |
|
12 | SIGUSR2 |
|
13 | SIGPIPE |
|
14 | SIGALRM | alarm |
15 | SIGTERM | Terminate. kill 명령의 default |
16 | SIGSTKFLT |
|
17 | SIGCHLD |
|
18 | SIGCONT | continue |
19 | SIGSTOP | Stop |
20 | SIGTSTP |
|
~중략 |
|
|
34 ~ 49 | SIGRTMIN ~ SIGRTMIN+15 |
|
50 ~ 64 | SIGRTMAX-14 ~ SIGRTMAX |
|
"kill" 명령에서 signal을 지정할 때는 number를 지정하거나, code 전체 또는 일부를 지정할 수 있다. 즉 "SIGKILL"인 경우 "-9", "-SIGKILL", "-KILL" 등의 형태를 사용할 수 있다.
특별히 signal을 지정하지 않으면 "SIGTERM"(no "15")를 default로 사용한다.
PID는 현재 실행되고 있는 특정 process에 부여되어 있는 process id를 의미한다. process list를 조회하면 통상 PID column이 있는데, 이것이 그 process에 할당된 PID를 보여준다.
특별한 처리를 위해서 정상적인 PID를 지정하는 대신 음수 PID를 사용할 수 있다. 음수 PID는 모든 process group를 선택할 때 사용하는데, process group에 대해서는 ps 명령의 PGID column을 참조하기 바란다. 또 PID가 "-1" 인 경우는 "kill" process 자신과 init를 제외한 모든 process를 지칭할 때 사용한다
[주요 option]
-<signal> -s <signal> --signal <signal> | Specify the signal to be sent. The signal can be specified by using name or number. The behavior of signals is explained in signal(7) manual page. |
-l, --list [signal] | List signal names. This option has optional argument, which will convert signal number to signal name, or other way round. |
-L, --table | List signal names in a nice table. |
다음은 <Motion> 프로그램에 관련된 process만 조회한 것이다.
pi@raspberrypi ~ $ ps -ef | grep motion |
motion 6835 1 1 19:07 ? 00:01:19 /usr/bin/motion pi 7053 6586 0 20:16 pts/0 00:00:00 grep --color=auto motion |
이제 위의 PID "6836" <Motion> 프로그램 process를 중단하고자 한다. 다음과 같이 kill 명령을 수행하고 다시 동일한 명령을 수행해서 결과를 확인한다. 그러면 해당 process가 더 이상 보이지 않는 것을 확인할 수 있다.
pi@raspberrypi ~ $ sudo kill 6835 |
|
pi@raspberrypi ~ $ ps -ef | grep motion |
pi 7075 6586 0 20:27 pts/0 00:00:00 grep --color=auto motion |
19.1.2.2 "killall" 명령 - name을 이용한 process 종료
시스템에 실행되고 있는 process 중에서 특정 command를 처리하는 process만 선택해서 signal을 보내는 것이 killall 명령이다.
[명령 형식]
killall [ options ] <signal> <name> |
[명령 개요]
■ 시스템에서 특정 command를 처리하는 process만 선택해서 종료시킨다.
■ user 권한 -- 일반 user.
[상세 설명]
■ killall은 지정된 command를 실행하고 있는 모든 process에 signal을 보낸다. 특별히 signal을 지정하지 않으면 SIGTERM을 기본으로 사용한다.
[주요 option]
-e, --exact | Require an exact match for very long names. If a command name is longer than 15 characters, the full name may be unavailable (i.e. it is swapped out). In this case, killall will kill everything that matches within the first 15 characters. With -e, such entries are skipped. killall prints a message for each skipped entry if -v is specified in addition to -e, |
-i, --interactive | Interactively ask for confirmation before killing. |
-l, --list | List all known signal names. |
-s, --signal
| Send this signal instead of SIGTERM.
|
-u, --user | Kill only processes the specified user owns. Command names are optional. |
[사용 Example]
다음은 <Motion> 프로그램에 관련된 process만 조회한 것이다.
pi@raspberrypi ~ $ ps -ef | grep motion |
motion 6835 1 1 19:07 ? 00:01:19 /usr/bin/motion pi 7053 6586 0 20:16 pts/0 00:00:00 grep --color=auto motion |
다음은 <Motion> 프로그램 명령을 수행한 process에 대해서 killall 명령을 실행한 다음 다시 <Motion> 프로그램 명령을 실행하는 process의 상태를 조회한 것이다. 앞에서 실행되고 있던 process가 사라진 것을 알 수 있다.
pi@raspberrypi ~ $ sudo killall motion |
|
pi@raspberrypi ~ $ ps -ef | grep motion |
pi 7187 6586 0 20:41 pts/0 00:00:00 grep --color=auto motion |
19.1.2.3 Desktop window을 이용한 process 종료
Raspberry Pi의 Desktop window로 접속한 경우에는 window 화면을 통하여 시스템을 모니터링할 수 있는 기능을 제공하는 [Task Manager]를 이용할 수 있다.
window의 Application Menu인 Menu àAccessories àTask Manager을 실행하면 아래와 같이 [Task Manager] 화면이 나타난다.
또한 아래와 같이 사용자가 필요한 task를 선택하여 작업을 중단하거나 재실행할 수 있으며, 필요한 경우는 종료할 수 있다. 이렇게 명령을 입력하지 않고도 task를 관리할 수 있는 기능을 제공해 준다.
그림 19‑3 Desktop window 프로세스 죽이기
다음은 이 화면에서 처리할 수 있는 작업이다.
■ Stop
■ continue
■ Terminate
■ Kill
■ Priority 조정