Raspberry Pi_Kor_19.1.2 process 죽이기


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를 실행하고 있는 모든 processsignal을 보낸다. 특별히 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 MenuMenu àAccessories àTask Manager을 실행하면 아래와 같이 [Task Manager] 화면이 나타난다.

 

또한 아래와 같이 사용자가 필요한 task를 선택하여 작업을 중단하거나 재실행할 수 있으며, 필요한 경우는 종료할 수 있다. 이렇게 명령을 입력하지 않고도 task를 관리할 수 있는 기능을 제공해 준다.


그림 19‑3 Desktop window 프로세스 죽이기

 

다음은 이 화면에서 처리할 수 있는 작업이다.

    Stop

    continue

    Terminate

    Kill

    Priority 조정


 

Leave a Reply