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. 포그라운드 작업을 백그라운드로 전환
이미 실행 중인 포그라운드 작업을 백그라운드로 전환하려면 다음 단계를 따릅니다:
- 작업 일시 중지:
Ctrl + Z
를 사용하여 현재 포그라운드 작업을 일시 중지합니다.- 예시:
sleep 100 ^Z
- 위 명령은
sleep 100
을 일시 중지합니다.
- 위 명령은
- 예시:
- 작업을 백그라운드로 전환:
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 &
nohup
은long_running_task
를 백그라운드에서 실행하며, 셸이 종료되어도 작업이 계속 실행됩니다.- 출력은 기본적으로
nohup.out
파일에 저장됩니다.
9. 요약
Bash 쉘에서 백그라운드 작업을 관리하는 것은 시스템 리소스를 효율적으로 사용하고, 동시에 여러 작업을 수행하는 데 매우 유용합니다. 백그라운드 작업을 설정하고 관리하는 방법을 이해하면, 더 효율적인 작업 흐름을 구축할 수 있습니다.
'언어 > Bash' 카테고리의 다른 글
[ Bash ] fc 명령어로 history 기능을 활용하기 (0) | 2024.06.30 |
---|---|
[ Bash ] 유닉스 쉘 종류 구분하기 (0) | 2024.06.30 |
[ Bash ] 파이프 라인 사용하기 (0) | 2024.06.09 |
[ Bash ] 와일드 카드 사용하기 (1) | 2024.06.09 |
[ Bash ] 유닉스 Shell 의 역사 (0) | 2024.06.09 |