작업 제어

멀티 태스킹은 Unix 시스템 최고의 장점 중 하나이다. Unix는 포그라운드와 백그라운드로 프로그램을 구별한다. 이 기능 덕분에 터미널에서 동시에 여러 개의 프로그램을 실행시킬 수 있다.

포그라운드와 백그라운드

포그라운드에서는 한번에 오직 한개의 프로그램만 실행할 수 있는 반면, 백그라운드에서는 여러 프로그램을 동시에 실행시킬 수 있다.

프로그램을 백그라운드에서 실행시키려면 명령행 끝에 앰퍼샌드(&)를 붙이면 된다.

$ gcc test.c &
[1] 2573

위 명령어를 사용하면 test.c라는 파일을 백그라운드에서 컴파일하고, 컴파일이 진행되는 동안 다른 일을 할 수 있다. 쉘은 작업 번호를 대괄호([])안에 출력하고 프로세스 식별 번호(PID)를 이어서 출력함으로서 백그라운드 작업이 시작되었음을 알린다.
jobs명령어는 현재 백그라운드로 실행되고 있는 프로그램들의 리스트를 출력한다.

$ gcc test.c &
[1] 2574
$ jobs
[1]     + Running   gcc test.c

백그라운드 프로그램을 포그라운드로 가져오려면 fg명령어를 이용한다. 백그라운드에 여러개의 작업이 있다면 fg명령어 뒤에 작업 식별자(% 와 작업번호)를 이용한다.

$ jobs
[1]     - Running   gcc test.c
[2]     + Stopped   vi test.c
$ fg %1

작업 목록에 있는 덧셈기호는 그 작업이 기본적으로 포그라운드로 올라오게 될 것이라는 것을 의미한다.

포그라운드에서 실행중인 작업을 중지시키려면 CTRL+z를 누른다. CTRL+z는 CTRL+c같은 인터럽트 문자가 적용되지 않는 프로그램을 중단시키고자 할 때도 이용할 수 있다.
백그라운드 명령어안 bg는 중단된 프로그램을 백그라운드에서 다시 실행시키는 데 이용된다. 포그라운ㄷ 명령어 fg는 이 프로그램을 다시 포그라운드에서 실행하도록 한다.

$ gcc test.c
CTRL+z
Stopped
% bg
[1]     +Running    gcc test.c

백그라운드 작업은 kill명령어를 이용해 끝낼 수 있다.

$ kill %1

작업번호 뿐만 아니라 작업명을 이용해 작업을 선택할 수 있다.

$ kill %gcc

작업 제어 요약

명령어 의미
command & 백그라운드에서 command를 실행. 계속해서 포그라운드에서 다른 작업들을 실행할 수 있음
CTRL+c INTR 시그널을 보내서 포그라운드 작업을 죽임
CTRL+z TSTP 시그널을 보내서 포그라운드 작업을 중지시킴
suspend 쉘을 중지시킴
stop 명령어 또는 같은 기능의 앨리어스를 이용해 백그라운드 작업을 중지시킴
bg %num 중지된 작업을 백그라운드에서 계속 실행되도록 함
fg %num 백그라운드 작업이나 중지된 작업을 포그라운드로 가져옴
kill &num 특정 백그라운드 작업을 중지시킴
kill pid 프로세스 ID를 이용해 특정 백그라운드 작업을 종료시킴
jobs 백그라운드 작업과 중지된 작업을 작업 번호와 함께 나열함
set notify 작업의 상태가 바뀌면 즉시 통보함
stty tostop 백그라운드 작업들이 화면에 메세지를 출력하지 못하도록 함
through.kim's profile image

through.kim

2016-12-26 11:02

Read more posts by this author