컴퓨터 세상/LiNuX

작업 제어 (포그라운드&백그라운드)

Jimin Daddy 2022. 5. 19. 12:41

작업 제어 도구는 한 터미널에서 동시에 여러 프로세스를 실행하고 관리하기 위한 것이다.


1) 포그라운드 작업
  사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다리는 방식으로 처리되는 프로세스를
  포그라운드 프로세스라고 함. 포그라운드 작업이라 한다.
  포그라운드 작업은 일반적으로 사용자가 명령을 실행하는 방식으로 프롬프트가 출력되지 않으면
  명령을 입력할 수 없어 기다려야 한다.
  sleep 명령은 주어진 시간만큼 프로세스의 실행이 지연되는 대표적인 포그라운드 작업이다.
  ex) sleep 100


2) 백그라운드 작업
  백그라운드 기능을 사용하게 되면 한 터미널에서 여러 개의 프로세스를 동시에 실행할 수 있다.
  백그라운드 방식으로 명령을 실행하면 곧바로 프롬프트가 출력되어 다른 작업을 계속할 수 있다.
  명령을 백그라운드로 실행하려면 명령의 마지막에 '&' 기호를 추가 한다.
  ex) sleep 100 &     --> 그러면 프롬프트가 바로 나온다.
  백그라운드 작업의 실행이 끝나면 기존의 작업 화면과 백그라운드 작업 결과가 뒤섞인 채 출력될 수 있다.
  그래서 백그라운드로 처리할 때는 다음과 같이 출력과 오류 방향을 전환하고, 실행 결과와 오류 메시지는
  파일로 저장하는 방법을 사용하여 문제를 해결.
  ex) [user1@localhost ~]$ find / -name passwd > pw.dat 2>&1 &   --> pw.dat에 결과와 오류를 저장.

3) 작업 제어
  작업 제어는 작업 전환, 작업 일시 중지, 작업 종료를 말함.
  작업 전환은 포그라운드 작업을 백그라운드 작업으로 전환하거나 그 반대로 전환하는 것을 말함.
  작업 일시 중지는 작업을 잠시 중단하는 것.
  작업 종료는 프로세스(작업)을 종료하는 것.
  * jobs
    - 기능 : 백그라운드 작업을 모두 보여준다. 특정 작업 번호를 지정하면 해당 작업의 정보만 보여준다.
    - 형식 : jobs [%작업 번호]
    - %작업 번호 :
      %번호 : 해당 번호의 작업 정보를 출력.
      %+ 또는 %% : 작업 순서가 +인 작업 정보를 출력
      %- : 작업 순서가 - 인 작업 정보를 출력
    - 사용 예
      jobs %1
      jobs
    - jobs 명령의 출력 정보

항목 출력 예 의미
작업 번호 [1] 작업 번호로써 백그라운드로 실행할 때마다 순차적으로 증가한다. ([1], [2],[3]...)
작업 순서 + 작업 순서를 표시한다.
* + : 가장 최근에 접근한 작업
* - : + 작업보다 바로 전에 접근한 작업
* 공백 : 그 외의 작업
상태 실행 중 작업 상태를 표시
* Running : 현재 실행 중이다.
* Done : 작업이 정상적으로 종료된다.
* Terminated : 작업이 비정상적으로 종료
* Stopped : 작업이 잠시 중단됨.
명령 sleep 100 & 백그라운드로 실행 중인 명령이다.

  * 작업 전환 하기
    - 작업 전환 명령

명령 기능
Ctrl+z 또는 stop %작업 번호 포그라운드 작업을 중지한다 (종료하는 것이 아닌 잠시 중단하는 것)
bg %작업 번호 작업 번호가 지시하는 작업을 백그라운드 작업으로 전환
fg %작업 번호 작업 번호가 지시하는 작업을 포그라운드 작업으로 전환

현재 포그라운드로 실행 중인 작업을 백그라운드로 전환하려면 우선 Ctrl+z로 작업을 중지한 후 'bg %작업 번호' 명령으로
작업을 백그라운드로 전환한다. (bg 명령만 사용하면 작업 순서가 +인 작업에 적용된다)
* 작업 종료하기 : Ctrl+c
  포그라운드 작업은 Ctrl+C를 입력하면 대부분 종료된다. Ctrl+c는 인터럽트 시그널을 포그라운드 프로세스에 전달하며,
  인터럽트를 받으면 기본적으로 프로세스를 종료하도록 되어 있다.
  물론 프로그램에서 Ctrl+c를 무시하도록 설정한 경우에는 종료되지 않는다.
  포그라운드 작업을 종료하는 또 다른 방법은 다른 터미널에서 해당 프로세스의 PID를 찾아 강제로 종료하는 것이다.
  ex) sleep 100  --> 포그라운드로 실행 중
        ctrl+c   --> 강제 종료함.
  백그라운드 작업은 kill 명령으로 강제 종료해야 한다. kill 명령의 인자로 PID 대니 '% 작업 번호'를 지정해도 된다.
  ex) sleep 100&    --> 백그라운드로 실행 중
        kill %1    --> 강제 종료 함.
        [1]+ 종료됨            sleep 100    --> 종료 메시지 출력
* 로그아웃 후에도 백그라운드 작업 계속 실행하기 : nohup
   백 그라운드 작업을 실행한 터미널이 종료되거나 사용자가 로그아웃하면 실행 중이던 백그라운드 작업도 함께 종료됨.
   그런데 로그아웃한 다음에도 작업이 완료될 때까지 백그라운드 작업을 실행해야 할 경우가 있다. 이 때 nohup 명령 사용.
   기능 : 로그아웃한 후에도 백그라운드 작업을 계속 실행
   형식 : nohup 명령&
   - nohup 명령을 사용할 때에는 반드시 백그라운드로 실행해야 함.
     별도로 출력 방향 전환을 하지 않으면 명령의 실행 결과와 오류 메시지가 현재 디렉토리에 nohup.out 파일로 자동 저장됨.
    

'컴퓨터 세상 > LiNuX' 카테고리의 다른 글

리눅스의 기초  (0) 2023.03.09
작업 예약  (0) 2022.05.26
프로세스 관리 명령  (0) 2022.05.17
프로세스의 개념  (0) 2022.05.17
특수 접근 권한 설정  (0) 2022.05.03