Linux Bash shell script

Bash Shell Script 백그라운드 실행 (&, jobs, fg, bg)

임베디드 친구 2025. 1. 30. 17:13
반응형

Linux Bash 스크립트를 사용하다 보면 백그라운드 실행을 다룰 일이 자주 생깁니다. 백그라운드 실행은 작업을 비동기적으로 처리하거나 시스템의 효율을 높이는 데 유용합니다. 오늘은 백그라운드 실행의 개념과 이를 다루는 &, jobs, fg, bg 명령어에 대해 알아보고, 실제 예제 코드를 통해 어떻게 활용하는지 살펴보겠습니다.


1. 백그라운드 실행이란?

백그라운드 실행은 특정 작업을 현재 터미널 세션에서 독립적으로 실행하여, 사용자가 다른 작업을 계속 수행할 수 있도록 합니다. 이를 위해 명령어 끝에 &를 붙이면 됩니다.

예제

# 간단한 백그라운드 실행
sleep 10 &
echo "Sleep 명령어가 백그라운드에서 실행됩니다."

위 코드를 실행하면 sleep 10 명령어는 백그라운드에서 실행되고, 터미널은 즉시 다음 명령어를 받을 준비가 됩니다.


2. jobs 명령어로 작업 관리하기

jobs 명령어는 현재 세션에서 실행 중인 백그라운드 작업들의 상태를 확인할 수 있도록 도와줍니다.

주요 옵션

  • jobs -l: 각 작업의 PID(프로세스 ID)를 함께 출력합니다.
  • jobs -p: 작업 ID 대신 PID만 출력합니다.

예제

# 백그라운드에서 작업 실행
sleep 20 &
sleep 30 &

# 백그라운드 작업 확인
jobs

# 출력 예시
# [1]+  Running                 sleep 20 &
# [2]-  Running                 sleep 30 &

3. fg 명령어로 작업을 포어그라운드로 가져오기

백그라운드에서 실행 중인 작업을 다시 포어그라운드로 전환하려면 fg 명령어를 사용합니다.

사용법

  • fg %[job_number]: 특정 작업 번호를 포어그라운드로 전환합니다.

예제

# 백그라운드에서 실행
sleep 15 &

# 작업 목록 확인
jobs

# 특정 작업을 포어그라운드로 전환
fg %1

위 예제에서 fg %1 명령어는 작업 번호 1번을 포어그라운드로 전환합니다.


4. bg 명령어로 백그라운드 작업 재개하기

bg 명령어는 중단된(suspended) 작업을 백그라운드에서 재개할 때 사용합니다.

예제

# 포어그라운드에서 실행 후 중단
sleep 100
# Ctrl+Z 입력으로 중단

# 중단된 작업 확인
jobs

# 작업을 백그라운드에서 재개
bg %1

위 예제에서 Ctrl+Z를 사용해 작업을 중단한 뒤, bg %1 명령어로 백그라운드에서 다시 실행합니다.


5. 실전 예제: 백그라운드에서 다수의 작업 실행 및 관리

여러 작업을 백그라운드에서 실행하고 이를 관리하는 예제를 살펴봅니다.

예제

#!/bin/bash

# 여러 명령어를 백그라운드에서 실행
sleep 20 &
process1=$!

echo "첫 번째 작업 PID: $process1"

sleep 30 &
process2=$!

echo "두 번째 작업 PID: $process2"

# 작업 목록 확인
jobs

# 첫 번째 작업을 포어그라운드로 전환
fg %1

# 두 번째 작업을 중단 후 백그라운드에서 재개
kill -STOP $process2
kill -CONT $process2

코드 설명

  1. &를 사용해 두 개의 작업을 백그라운드에서 실행합니다.
  2. $!는 최근 실행된 백그라운드 작업의 PID를 저장합니다.
  3. jobs로 작업 목록을 확인합니다.
  4. 첫 번째 작업은 fg로 포어그라운드에서 실행합니다.
  5. 두 번째 작업은 kill 명령어를 사용해 중단(STOP) 및 재개(CONT)합니다.

6. 유용한 팁과 주의사항

6.1 SIGSTOP과 SIGCONT 활용

kill 명령어를 사용하면 특정 작업을 중단시키거나 재개할 수 있습니다.

# 특정 PID의 작업 중단
kill -STOP <PID>

# 특정 PID의 작업 재개
kill -CONT <PID>

6.2 백그라운드 실행 시 로그 관리

백그라운드 실행 작업의 로그를 파일로 리디렉션하여 관리할 수 있습니다.

# 로그를 파일로 저장하며 백그라운드 실행
my_program > program.log 2>&1 &

결론

Bash에서 백그라운드 실행은 작업 효율을 높이고 시스템 자원을 효과적으로 활용하는 데 중요한 역할을 합니다. 오늘 배운 &, jobs, fg, bg 명령어와 함께 kill을 활용하면 백그라운드 작업을 더 유연하게 관리할 수 있습니다.

앞으로 스크립트 작성 시 오늘 배운 내용을 적극 활용해 보세요!

반응형