IT Technology/Linux

포그라운드, 백그라운드 프로세스 (작업제어)

by빵수 2021. 3. 30. 21:14
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