리눅스와 다른 유닉스 기반 시스템에서는 프로세스를 포그라운드 또는 백그라운드에서 실행할 수 있습니다. 이 기능은 여러 작업을 동시에 수행할 때 유용하며, 사용자가 쉘 세션을 유지하면서 다른 작업을 실행하게 해줍니다.
배경 작업 실행
&를 사용하여 명령어나 스크립트를 백그라운드에서 실행할 수 있습니다.
먼저 10분 동안 동작하는 간단한 예제를 만들어보겠습니다. 이를 위해 sleep 명령어를 사용하겠습니다.
#!/bin/bash
echo "백그라운드 작업 시작."
# 600초 동안 대기합니다. (10분)
sleep 600
echo "백그라운드 작업 종료."
이 스크립트는 실행되면 "백그라운드 작업 시작."이라는 메시지를 출력하고, 10분 동안 대기한 후 "백그라운드 작업 종료."라는 메시지를 출력합니다.
스크립트를 실행하려면 다음과 같은 명령어를 사용하면 됩니다:
[Example-Terminal:~ user]$ chmod +x longtask.sh
[Example-Terminal:~ user]$ ./longtask.sh &
chmod +x 명령어는 스크립트에 실행 권한을 부여합니다. &는 스크립트를 백그라운드에서 실행하겠다는 의미입니다.
백그라운드에서 스크립트 실행
이제 위에서 만든 .sh파일을 백그라운드에서 실행하고 싶다면 다음과 같이 수행할 수 있습니다.
[Example-Terminal:~ user]$ ./longtask.sh &
[1] 12345
여기서 12345는 프로세스 ID입니다.
백그라운드 작업 확인
jobs 명령어를 사용하여 현재 백그라운드에서 어떤 작업이 진행되고 있는지 확인해봅시다.
[Example-Terminal:~ user]$ jobs
[1]+ Running ./longtask.sh &
현재 1개의 작업이 진행중인 것을 확인할 수 있습니다.
백그라운드 작업을 포그라운드로 이동
fg 명령어를 사용하여 백그라운드에서 실행되고 있는 longtask.sh를 포그라운드로 가져옵니다.
[Example-Terminal:~ user]$ fg %1
./longtask.sh
이제 longtask.sh 스크립트는 포그라운드에서 실행되며, 스크립트의 출력을 직접 볼 수 있습니다.
작업 일시 중지 및 백그라운드 재개
스크립트가 포그라운드에서 실행되는 동안 Ctrl + Z를 눌러서 작업을 일시 중지할 수 있습니다.
[1]+ Stopped ./longtask.sh
이후 bg 명령어를 사용하면 일시 중지된 작업을 백그라운드에서 계속 실행할 수 있습니다.
[Example-Terminal:~ user]$ bg %1
[1]+ ./longtask.sh &
배경 작업 종료
kill 명령어를 사용하여 백그라운드에서 실행 중인 longtask.sh 스크립트 작업을 종료하려면:
[Example-Terminal:~ user]$ kill %1
[1]+ Terminated ./longtask.sh
파이썬을 활용해서 이러한 제어가 가능하기 때문에 같이 연습하면 좋을 것 같습니다.
파이썬 활용시에는 먼저 .py를 만든 후에 .sh파일을 따로 생성하여 만들면 됩니다.
#1/bin/bash
sudo python3 test.py
이후 bash 스크렙트를 실행 권한을 부여한 후 실행합니다.
[Example-Terminal:~ user]$ chmod +x runRGB.sh
[Example-Terminal:~ user]$ ./runRGB.sh
이후 과정은 위의 방법과 동일합니다.
'프로그래밍 > Linux' 카테고리의 다른 글
[Linux] 쉘 스크립트(Shell script) 5편 - 트랩(trap) 사용하기, 에러 옵션(set -e, set -o) (0) | 2023.08.31 |
---|---|
[Linux] 쉘 스크립트(Shell script) 4편 - 디버그 모드, 에러메시지 출력 (0) | 2023.08.31 |
[Linux] 쉘 스크립트(Shell script) 2편 - 함수와 파라미터, 사용자 입력과 출력 (0) | 2023.08.31 |
[Linux] 쉘 스크립트(Shell script) 1편 - 기본, 변수와 환경변수, 조건문과 반복문 (0) | 2023.08.31 |
[Linux] 리눅스 정규 표현식(Regular Expressions) (0) | 2023.08.31 |