본문 바로가기

언어/Bash

[ Bash ] 백그라운드 작업 시키기

반응형

Bash 쉘에서 백그라운드 작업을 실행하는 것은 시스템 리소스를 효과적으로 활용하고, 사용자가 다른 작업을 동시에 수행할 수 있도록 하는 중요한 기능입니다. 백그라운드 작업은 주로 긴 시간이 걸리는 명령이나 사용자가 직접 상호작용할 필요가 없는 작업에 사용됩니다. 다음은 Bash 쉘에서 백그라운드 작업을 설정하고 관리하는 방법을 설명합니다.

1. 백그라운드 작업 시작

명령을 백그라운드에서 실행하려면 명령의 끝에 & 기호를 붙입니다. 이렇게 하면 명령이 백그라운드에서 실행되면서, 사용자에게 즉시 새로운 프롬프트를 반환합니다.

예시:

sleep 60 &
  • 위 명령어는 sleep 명령을 백그라운드에서 실행하여 60초 동안 기다리게 합니다.
  • & 기호 덕분에 sleep 명령이 백그라운드에서 실행되므로, 사용자는 즉시 새로운 프롬프트를 사용할 수 있습니다.

2. 백그라운드 작업 확인

백그라운드에서 실행 중인 작업을 확인하려면 jobs 명령을 사용합니다. 이 명령은 현재 셸 세션에서 실행 중인 모든 백그라운드 작업의 목록을 보여줍니다.

예시:

jobs
  • jobs 명령어는 다음과 같은 출력을 제공합니다:여기서:
    • [1]은 작업 번호입니다.
    • +는 가장 최근에 실행된 백그라운드 작업을 나타냅니다.
    • Running은 작업의 현재 상태를 나타냅니다.
    • sleep 60 &는 실행 중인 명령을 나타냅니다.
  • [1]+ Running sleep 60 &

3. 백그라운드 작업 관리

Bash에서는 백그라운드 작업을 일시 중지하거나 다시 포그라운드로 가져올 수 있는 여러 가지 방법을 제공합니다.

작업 일시 중지

백그라운드 작업을 일시 중지하려면 kill -STOP 명령을 사용하여 작업을 중지할 수 있습니다.

kill -STOP %1
  • %1은 작업 번호 1을 나타냅니다. 이는 jobs 명령에서 확인할 수 있습니다.
  • 일시 중지된 작업은 jobs 명령에서 Stopped 상태로 표시됩니다.

작업 재개

일시 중지된 작업을 백그라운드에서 다시 실행하려면 bg 명령을 사용합니다.

bg %1
  • 위 명령은 작업 번호 1인 일시 중지된 작업을 다시 백그라운드에서 실행하도록 재개합니다.

작업 포그라운드로 가져오기

백그라운드 또는 일시 중지된 작업을 포그라운드로 가져오려면 fg 명령을 사용합니다.

fg %1
  • 위 명령은 작업 번호 1을 포그라운드로 가져와 사용자에게 제어를 다시 제공합니다.
  • 작업이 포그라운드로 돌아오면, 사용자는 명령이 완료될 때까지 기다려야 합니다.

4. 포그라운드 작업을 백그라운드로 전환

이미 실행 중인 포그라운드 작업을 백그라운드로 전환하려면 다음 단계를 따릅니다:

  1. 작업 일시 중지: Ctrl + Z를 사용하여 현재 포그라운드 작업을 일시 중지합니다.
    • 예시:
      sleep 100
      ^Z
      • 위 명령은 sleep 100을 일시 중지합니다.
  2. 작업을 백그라운드로 전환: bg 명령을 사용하여 작업을 백그라운드로 전환합니다.
    • 예시:
      bg

5. 프로세스 ID(PID)를 사용한 작업 관리

백그라운드에서 실행 중인 작업의 프로세스 ID(PID)를 알면, ps 명령과 kill 명령을 사용하여 해당 작업을 관리할 수 있습니다.

작업의 PID 확인

ps
  • ps 명령은 현재 셸 세션에서 실행 중인 프로세스의 목록을 보여줍니다.
  • 필요에 따라 ps aux를 사용하여 시스템의 모든 프로세스를 나열할 수도 있습니다.

특정 작업 종료

kill <PID>
  • <PID>는 종료할 프로세스의 ID입니다.
  • kill 명령은 해당 프로세스를 종료합니다.

6. 예시 시나리오: 백그라운드 작업 실행 및 관리

아래는 백그라운드 작업을 실행하고 관리하는 몇 가지 예시 시나리오입니다.

예시 1: 백그라운드에서 긴 작업 실행

long_running_task &
  • long_running_task 명령을 백그라운드에서 실행합니다.

예시 2: 백그라운드 작업 상태 확인

jobs
  • 현재 백그라운드에서 실행 중인 작업의 상태를 확인합니다.

예시 3: 백그라운드 작업을 포그라운드로 가져오기

fg %1
  • 작업 번호 1을 포그라운드로 가져와 사용자가 제어할 수 있게 합니다.

예시 4: 포그라운드 작업을 백그라운드로 전환

sleep 100
^Z
bg
  • sleep 100 명령을 일시 중지하고(Ctrl + Z), 백그라운드에서 다시 실행합니다(bg).

예시 5: 프로세스 ID를 사용한 작업 종료

ps
kill 1234
  • ps 명령으로 PID 1234를 확인하고, kill 1234 명령으로 해당 프로세스를 종료합니다.

7. 백그라운드 작업의 입출력 관리

백그라운드 작업은 표준 출력(stdout)과 표준 오류(stderr)를 그대로 두면 터미널에 출력될 수 있습니다. 이를 관리하기 위해 출력을 파일로 리디렉션할 수 있습니다.

예시 6: 출력 리디렉션

long_running_task > output.txt 2>&1 &
  • long_running_task 명령의 표준 출력과 표준 오류를 output.txt 파일로 리디렉션하고, 명령을 백그라운드에서 실행합니다.
  • > output.txt: 표준 출력을 output.txt 파일로 리디렉션합니다.
  • 2>&1: 표준 오류를 표준 출력으로 리디렉션하여, 모든 출력이 output.txt 파일로 기록됩니다.

8. nohup을 사용한 독립 실행

nohup 명령을 사용하면 셸이 종료된 후에도 백그라운드 작업이 계속 실행되도록 할 수 있습니다. 이는 특히 원격 세션에서 유용합니다.

예시 7: nohup을 사용한 백그라운드 작업 실행

nohup long_running_task &
  • nohuplong_running_task를 백그라운드에서 실행하며, 셸이 종료되어도 작업이 계속 실행됩니다.
  • 출력은 기본적으로 nohup.out 파일에 저장됩니다.

9. 요약

Bash 쉘에서 백그라운드 작업을 관리하는 것은 시스템 리소스를 효율적으로 사용하고, 동시에 여러 작업을 수행하는 데 매우 유용합니다. 백그라운드 작업을 설정하고 관리하는 방법을 이해하면, 더 효율적인 작업 흐름을 구축할 수 있습니다.

반응형