4.3 프로세스 제어    [gdoc]

쉘에서는 프로세스를 작업(job)이라는 단위로 관리하는데 작업은 포그라운드 (foreground)백그라운드 (background) 두 가지 방식으로 동작한다. 포그라운드는 작업이 시작되고 종료되는 시점까지 다른 쉘 명령어를 수행할 수 없고 대기하는 방식을 말한다. 반면 백그라운드로 작업을 수행하면 동시에 다른 명령어들을 실행시킬 수 있다. 이렇게 동시에 여러 명령어들을 실행시키는 것을 멀티태스킹(multi-tasking)이라고 한다.


쉘에서 작업을  제어하기 위한 명령어들을 다음 표에 정리하였다. 아래 표에서 JID는 jobs 명령으로 확인할 수 있는 작업의 고유 번호이다.


문법

동작

비고

실행명령 &

실행명령을 백그라운드에서 수행한다.


ps

프로세스의 리스트(전 절 참조)


jobs

백그라운드 프로세스 리스트


CTRL-Z

포그라운드 작업을 일시 중지한 후 백그라운드로 밀어 넣는다.


CTRL-C

포그라운드 작업을 정지(종료)


%JID

백그라운드 프로세스는 고유번호(JID)가 매겨지는데 (fg, bg, kill 명령에서) 그것을 참조하기 위해서 번호 앞에 %를 붙인다.


fg %JID

백그라운드 작업을 포그라운드로 올린다.


bg %JID

일시 정지된 백그라운드 작업을 재시작


kill PID / %JID

kill -KILL PID / %JID

kill -STOP PID / %JID

kill -CONT OID / %JID

프로세스를 종료.

프로세스 강제  종료 (kill -9 PID)

백그라운드 프로세스 실행 일시 정지

정지된 백그라운드 프로세스 재시작




bg %JID

pkill CMD

명령어(CMD)로 실행된 프로세스 종료



어떤 명령을 처음부터 백그라운드로 실행하고자 한다면 끝에 ‘&’를 붙이면 된다.


pi@raspberrypi:~ $ sleep 100&

이렇게 하면 ‘sleep 100’ 명령은 즉시 백그라운드  실행 모드로 들어가고 쉘에서 다른 일을 처리할 수 있다.

jobs는 백그라운드 프로세스 리스트를 표시하는 명령어이다.


pi@raspberrypi:~ $ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &

리스트의 맨 앞의 숫자가 작업의 고유 번호(JID)이고 그 다음 실행여부(Running/Stopped)가 표시되며 실행한 명령어가 이어서 나타난다.

포그라운드 작업은 ctrl+c를 누르면 대부분 종료된다. ctrl+c는 인터럽트 신호를 포그라운드 작업에 전달한다. 프로세스는 기본적으로 인터럽트 신호를 받으면 종료하도록 되어있다.


만약 포그라운드에서 어떤 작업을 수행중에 ctrl-z를 누르면 중지되고 쉘로 빠져나오게 된다. 이럴 때 jobs 명령어로 확인하면 Stopped 로 표시되고 이 작업을 백그라운드에서 재시작하려면 bg 명령을 내리면 된다.


pi@raspberrypi:~ $ sleep 200
^Z
[1]+  Stopped                 sleep 200
pi@raspberrypi:~ $ jobs
[1]+  Stopped                 sleep 200
pi@raspberrypi:~ $ bg %1
[1]+ sleep 200 &
pi@raspberrypi:~ $ jobs
[1]+  Running                 sleep 200 &
pi@raspberrypi:~ $ kill -STOP %1
[1]+  Stopped                 sleep 200

위에서 보듯이 정지된 백그라운드 프로세스를 백그라운드 상태에서 다시 시작하려면
‘kill -STOP %N’명령을 주면 된다.

프로세스를 정상적으로 종료하기 위해서는 ‘kill’ 명령을 이용하면 된다. 그리고 좀비 프로세스를 강제로 종료하기 위해서는 ‘kill -KILL’ 을 이용하면 된다.

Posted by 살레시오
,