티스토리 뷰
1. 포그라운드 작업과 백그라운드 작업
사용자가 터미널에서 작업할 때 보통의 경우 한번에 하나의 프로세스만 실행할 수 있다. 즉, 어떤 명령을 실행하면 명령이 끝날 때까지 기다려야 다시 터미널을 사용할 수 있는 것이다. 그런데 사용자가 어떤 프로세스를 실행하면서 동시에 다른 프로세스를 실행해야 할 때가 있다. 작업제어 도구는 이렇게 한 터미널에서 동시에 여러 프로세스를 실행하고 관리하기 위해 개발되었다.
포그라운드 작업
터미널에서 작업할 때 일반적으로 사용자가 명령을 입력하면 셸은 사용자가 입력한 명령을 해석하여 실행하고 그 결과를 화면에 출력한다. 그러면 사용자는 화면에 출력된 결과를 보고 다시 명령을 입력하는 대화식으로 작업을 수행한다. 이렇게 사용자가 입력한 명령이 실행되어 결과가 출력될때 까지 기다려야 하는 포그라운드 방식으로 처리되는 프로세스를 포그라운드 프로세스라고 하며, 이를 작업 제어에서는 포그라운드 작업이라고 한다.
포그라운드 작업은 일반적으로 사용자가 명령을 실행하는 방식으로, 프롬프트가 출력되지 않아 다른 명령을 입력할 수 없고 기다려야 한다. 다음은 포그라운드 작업의 예로, sleep 명령으로 주어진 시간만큼 잠시 프로세스의 실행이 지연된다.
백그라운드 작업
포그라운드 작업은 명령을 한 번에 하나씩 실행하므로 동시에 여러 개의 프로세스를 실행할 수 없다. 그러나 작업 제어가 제공하는 백그라운드 기능을 사용하면 앞에서 프로세스가 실행되는 동안 뒤에서 다른 프로세스가 실행될 수 있으므로 한 터미널에서 여러 개의 프로세스를 동시에 실행할 수 있다.
백그라운드 방식으로 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속 할 수 있다. 즉 필요한 여러 작업을 백그라운드로 실행한 후 터미널에서는 포그라운드 작업을 계속 진행할 수 있다. 이처럼 백그라운드 방식으로 처리되는 프로세스를 백그라운드 프로세스라고 하며, 작업 제어에서는 백그라운드 작업이라고 한다. 백그라운드 작업은 명령의 실행 시간이 많이 걸릴 것으로 예상되거나 명령을 실행한 후 다른 작업을 할 필요가 있을 때 많이 사용한다.
명령을 백그라운드로 실행하려면 명령의 마지막에 & 기호를 추가하면 된다.
백그라운드 작업과 출력 방향 전환하기
백그라운드 작업의 실행이 끝나면 현재 터미널에서 무엇을 하고 있는지에 상관없이 결과가 그대로 화면에 출력된다. 기존 작업의 화면과 백그라운드 작업 결과가 뒤섞여 제대로 확인하기가 어려워지는 것이다. 그래서 백그라운드로 처리할 때는 다음과 같이 출력과 오류 방향을 전환하여( > 명령어 사용) 실행결과와 오류메세지를 파일로 저장하는 방법을 많이 사용한다.
2. 작업 제어
작업 제어는 작업 전환과 작업 일시 중지, 작업 종료를 뜻한다. 작업 전환은 포그라운드 작업을 백그라운드 작업으로 전환하거나, 백그라운드 작업을 포그라운드 작업으로 전환하는 것을 말한다. 작업 일시 중지는 작업을 잠시 중단하는 것이고, 작업 종료는 프로세스를 종료하는 것처럼 작업을 종료하는 것이다.
작업 목록보기 : jobs
현재 실행중인 백그라운드 작업을 보는 명령어는 jobs이고, 배시 셸의 내부명령이다.
기능 백그라운드 작업을 모두 보여준다. 특정 작업 번호를 지정하면 해당 작업의 정보만 보여준다.
형식 jobs [%작업번호]
%작업 번호 %번호 : 해당 번호의 작업 정보를 출력한다
%+ 또는 && : 작업 순서가 +인 작업 정보를 출력한다.
%- : 작업 순서가 -인 작업 정보를 출력한다.
jobs 명령의 출력 항목
항목 | 출력 예 | 의미 |
작업 번호 | [1] | 작업 번호로서 백그라운드로 실행할 때마다 순차적으로 증가한다. |
작업 순서 | + | 작업 순서를 나타낸다. + : 가장 최근 작업 - : + 작업 바로 이전 작업 공백 : 그외 작업 |
상태 | 실행중 | 작업 상태를 나타낸다. 실행중 : 현재 실행중 완료됨 : 작업이 정상적으로 종료됨 종료됨 : 작업이 비정상적으로 종료됨 정지됨 : 작업이 잠시 중단됨 |
명령 | sleep 100& | 백그라운드로 실행중인 명령 |
작업 전환하기
명령 | 의미 |
Ctrl+z 또는 stop [%작업번호] | 포그라운드 작업을 일시 중지한다. |
bg [%작업 번호] | 작업 번호를 백그라운드 작업으로 전환 |
fg [%작업 번호] | 작업 번호를 포그라운드 작업으로 전환 |
현재 포그라운드로 실행중인 작업을 백그라운드로 전환하려면 우선 Ctrl + z 로 작업을 중지해야 한다. 그다음 'bg %작업번호' 명령으로 작업을 백그라운드로 전환한다. 작업번호를 지정하지 않고 bg 명령만 사용하면 작업 순서가 +인 작업에 적용된다.
백그라운드로 실행중인 작업을 다시 포그라운드로 전환하려면 'fg %작업번호' 명령을 사용한다. bg와 마찬가지로 작업번호를 지정하지 않고 fg 명령만 사용하면 작업 순서가 +인 작업에 적용된다.
작업 종료하기 : Ctrl + C
포그라운드 작업은 Ctrl + c 를 입력하면 대부분 종료된다. Ctrl + c는 인터럽트 시그널을 포그라운드 프로세스에 전달하며, 인터럽트를 ㅂ다으면 기본적으로 프로세스가 종료되도록 되어 있다. 물론 프로그램에서 Ctrl + c를 무시하도록 설정했을 경우에는 종료되지 않는다. 포그라운드 작업을 종료하는 또 다른 방법은 다른 터미널에서 해당 프로세스의 PID를 찾아 강제로 종료하는 것이다.
백그라운드 작업은 kill 명령으로 강제 종료해야 한다. 이때 kill 명령의 인자로 PID 대신 % 작업번호를 지정해도 된다.
로그아웃 후에도 백그라운드 작업 계속 실행하기 : nohup
백그라운드 작업을 실행한 터미널이 종료되거나 사용자가 로그아웃하면 실행 중이던 백그라운드 작업도 함께 종료된다. 그런데 로그아웃한 다음에도 작업이 완료될 때까지 백그라운드 작업을 실행해야 하는 경우가 있다. 이때 nohup 명령을 사용한다.
nohup
기능 로그아웃 한 뒤에도 백그라운드 작업을 계속 실행한다.
형식 nohup 명령&
nohup로 실행한 명령은 반드시 백그라운드로 해야 한다. 별도로 출력 방향 전환을 하지 않으면 명령의 실행 결과와 오류 메시지가 현재 디렉터리에 nohup.out 파일로 자동 저장된다.
'Linux' 카테고리의 다른 글
우분투 패키지 설치 (0) | 2015.05.08 |
---|---|
작업 예약 (0) | 2015.05.07 |
프로세스를 종료할 때 pkill이 kill보다 편리한 경우 (0) | 2015.05.07 |
프로세스 관리명령 2 (0) | 2015.05.07 |
프로세스 관리 명령 (1) | 2015.05.07 |
- Total
- Today
- Yesterday
- 파이썬
- 클라이언트
- 소켓 프로그래밍
- 데이터베이스
- 리눅스
- C++
- socket
- 파일
- 쓰레드
- MFC
- UML
- 클래스
- 터미널
- 라즈베리파이
- 디렉터리
- 티그널
- C/C++
- 파이썬예제
- Sort
- 액터
- 악보
- C
- 티라노 시그널
- 정렬
- 스레드
- 유즈케이스
- 자료구조
- 프로세스
- 소켓
- 안드로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |