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 200pi@raspberrypi:~ $ jobs[1]+ Stopped sleep 200pi@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’ 을 이용하면 된다.
'맥,리눅스,윈도' 카테고리의 다른 글
윈도우에서 bash라니.. (0) | 2017.10.21 |
---|---|
리눅스 프로세스 목록 확인 방법 (0) | 2017.01.09 |
리눅스 프로세스(process) 개요 (0) | 2017.01.09 |
라즈비언에서 taskbar를 실수로 삭제했을 때 복구하는 법 (0) | 2016.10.22 |
맥북에서 home/end/pageUp/pageDown 키 (0) | 2016.10.21 |