728x90
반응형
포그라운드 작업과 백그라운드 작업
- 사용자가 터미널에서 작업할 때 보통의 경우 한 번에 하나의 프로세스만 실행할 수 있다.
- 즉, 어떤 명령을 실행하면 명령이 끝날 때까지 기다려야 다시 터미널을 사용할 수 있는 것이다.
- 그런데 사용자가 어떤 프로세스를 실행하면서 동시에 다른 프로세스를 실행해야 할 때가 있다.
- 작업 제어 도구는 이렇게 한 터미널에서 동시에 여러 프로세스를 실행하고 관리하기 위해 개발되었다.
포그라운드 작업
- 터미널에서 작업할 때 일반적으로 사용자가 명령을 입력하면 셸은 사용자가 입력한 명령을 해석하여 실행하고 그 결과를 화면에 출력한다.
- 그러면 사용자는 화면에 출력된 결과를 보고 다시 명령을 입력하는 대화식으로 작업을 수행한다.
- 이렇게 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 포그라운드 방식으로 처리되는 프로세스를 포그라운드 프로세스라고 하며, 이를 작업 제어에서는 포그라운드 작업이라고 한다.
- 포그라운드 작업은 일반적으로 사용자가 명령을 실행하는 방식으로, 프롬프트가 출력되지 않아 다른 명령을 입력할 수 없고 기다려야 한다.
- 다음은 포그라운드 작업의 예로, sleep 명령으로 주어진 시간만큼 잠시 프로세스의 실행이 지연된다.
백그라운드 작업
- 포그라운드 작업은 명령을 한 번에 하나씩 실행하므로 동시에 여러 개의 프로세스를 실행할 수 없다.
- 그러나 작업 제어가 제공하는 백그라운드 기능을 사용하면 앞에서 프로세스가 실행되는 동안 뒤에서 다른 프로세스가 실행될 수 있으므로 한 터미널에서 여러 개의 프로세스를 동시에 실행할 수 있다.
- 백그라운드 방식으로 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속할 수 있다.
- 즉 필요한 여러 작업을 백그라운드로 실행한 후 터미널에서는 포그라운드 작업을 계속 진행할 수 있다.
- 이처럼 백그라운드 방식으로 처리되는 프로세스를 백그라운드 프로세스라고 하며, 작업 제어에서는 백그라운드 작업이라고 한다.
- 백그라운드 작업은 명령의 실행 시간이 많이 걸릴 것으로 예상되거나 명령을 실행한 후 다른 작업을 할 필요가 있을 때 많이 사용한다.
- 명령을 백그라운드로 실행하려면 명령의 마지막에 & 기호를 추가하면 된다.
백그라운드 작업과 출력 방향 전환하기
- 백그라운드 작업의 실행이 끝나면 현재 터미널에서 무엇을 하고 있는지에 상관없이 결과가 그대로 화면에 출력된다.
- 기존 작업의 화면과 백그라운드 작업 결과가 뒤섞여 제대로 확인하기가 어려워지는 것이다.
- 그래서 백그라운드로 처리할 때는 다음과 같이 출력과 오류 방향을 전환하여( > 명령어 사용) 실행결과와 오류메세지를 파일로 저장하는 방법을 많이 사용한다.
작업제어
현재 실행 중인 백그라운드 작업을 보는 명령어는 jobs이고, 배시 셸의 내부 명령이다.
기능 : 백그라운드 작업을 모두 보여준다. 특정 작업 번호를 지정하면 해당 작업의 정보만 보여준다.
형식 : jobs [%작업번호]
%작업 번호
%번호 : 해당 번호의 작업 정보를 출력한다
%+ 또는 && : 작업 순서가 +인 작업 정보를 출력한다.
%- : 작업 순서가 -인 작업 정보를 출력한다.
jobs 명령의 출력 항목
항목 | 출력 예 | 의미 |
작업 번호 | [1] | 작업 번호로서 백그라운드로 실행할 때마다 순차적으로 증가한다. |
작업 순서 | + | 작업 순서를 나타낸다. + : 가장 최근 작업 - : + 작업 바로 이전 작업 |
상태 | 실행중 | 작업 상태를 나타낸다. 실행중 : 현재 실행중 완료됨 : 작업이 정상적으로 종료됨 종료됨 : 작업이 비정상적으로 종료됨 정지됨 : 작업이 잠시 중단됨 |
명령 | sleep 100& | 백그라운드로 실행중인 명령 |
작업 전환하기
명령 | 의미 |
Ctrl+z 또는 stop [%작업 번호] | 포그라운드 작업을 일시 중지한다. |
bg [%작업 번호] | 작업 번호를 백그라운드 작업으로 전환 |
fg [%작업 번호] | 작업 번호를 포그라운드 작업으로 전환 |
- 현재 포그라운드로 실행 중인 작업을 백그라운드로 전환하려면 우선 Ctrl + z 로 작업을 중지해야 한다.
- 그다음 'bg %작업번호' 명령으로 작업을 백그라운드로 전환한다.
- 작업번호를 지정하지 않고 bg 명령만 사용하면 작업 순서가 +인 작업에 적용된다.
- 백그라운드로 실행중인 작업을 다시 포그라운드로 전환하려면 'fg %작업번호' 명령을 사용한다.
- bg와 마찬가지로 작업번호를 지정하지 않고 fg 명령만 사용하면 작업 순서가 +인 작업에 적용된다.
작업 종료하기 [ Ctrl + C ]
- 포그라운드 작업은 Ctrl + c 를 입력하면 대부분 종료된다.
- Ctrl + c는 Interrupt(인터럽트) 시그널을 포그라운드 프로세스에 전달하며, 인터럽트를 받으면 기본적으로 프로세스가 종료되도록 되어 있다.
- 물론 프로그램에서 Ctrl + c를 무시하도록 설정했을 경우에는 종료되지 않는다.
- 포그라운드 작업을 종료하는 또 다른 방법은 다른 터미널에서 해당 프로세스의 PID를 찾아 강제로 종료하는 것이다.
- 백그라운드 작업은 kill 명령으로 강제 종료해야 한다.
- 이때 kill 명령의 인자로 PID 대신 % 작업번호를 지정해도 된다.
로그아웃 후에도 백그라운드 작업 계속 실행하기 : nohup
- 백그라운드 작업을 실행한 터미널이 종료되거나 사용자가 로그아웃하면 실행 중이던 백그라운드 작업도 함께 종료된다.
- 그런데 로그아웃한 다음에도 작업이 완료될 때까지 백그라운드 작업을 실행해야 하는 경우가 있다.
- 이때 nohup 명령을 사용한다.
nohup
기능 : 로그아웃 한 뒤에도 백그라운드 작업을 계속 실행한다.
형식 : nohup명령&
- nohup로 실행한 명령은 반드시 백그라운드로 해야 한다.
- 별도로 출력 방향 전환을 하지 않으면 명령의 실행 결과와 오류 메시지가 현재 디렉토리에 nohup.out 파일로 자동 저장된다.
반응형
'IT Technology > Linux' 카테고리의 다른 글
SUSE Linux rear Backup, Recovery (0) | 2021.04.30 |
---|---|
Vi 저장 및 종료, 명령어 모음 (0) | 2021.04.12 |
Linux 디렉토리 구성 (0) | 2021.03.19 |
Open SUSE (오픈수세) 리눅스 (0) | 2021.03.13 |
Linux Shell 종류 (0) | 2021.03.11 |