[Linux/Ubuntu] 백그라운드 프로세스
1. 백그라운드 프로세스란?
백그라운드 프로세스란 사용자와 상호 작용하는 것이 아닌 시스템 자원을 이용하여 실행되는 프로세스를 말합니다.
일반적으로 백그라운드 프로세스는 실행 시점에 Shell 명령 끝에 & 기호를 입력하거나
Ctrl + Z 명령으로 현재 실행 중인 프로세스를 중지시킨 뒤 bg 명령을 이용해 실행할 수 있습니다.
2. 백그라운드 프로세스를 사용하는 이유
백그라운드 프로세스는 사용자가 명령을 실행한 후 결과를 기다리는 동안에도 명령을 실행하도록 하기 위해 사용합니다.
백그라운드 프로세스를 사용하여, 사용자는 작업을 처리하며 다른 작업도 수행할 수 있어 작업의 효율성이 증가합니다.
또한, 백그라운드 프로세스를 이용하여 지속적으로 실행되는 서비스나 데몬 프로그램을 구현할 수 있기 때문에
시스템의 안정성과 확장성도 증가할 수 있습니다.
3. 백그라운드 프로세스 실행 방법
3-1. & 기호를 이용한 실행
$ sleep 10 &
[1] 12345
위의 예시는 *sleep 명령어를 실행하는데, & 기호를 이용해 백그라운드에서 실행하도록 합니다.
[1] 12345는 작업 번호와 프로세스 ID(PID)를 나타내며, 이를 통해 백그라운드 프로세스를 제어할 수 있습니다.
sleep | 지정된 시간 동안 프로세스 일시 중지 (실행 지연) |
sleep 50 | 포그라운드 실행 (다른 명령 실행 불가) |
sleep 50 & | 백그라운드 실행 (다른 명령 실행 가능) |
3-2. bg 명령을 이용한 실행
Ctrl + Z과 bg 명령어
$ sleep 10
^Z
[1] + Stopped sleep 10
$ bg
[1] + sleep 10 &
Ctrl + Z 명령으로 현재 실행 중인 프로세스를 중지시키고, 해당 작업을 백그라운드에서 실행하기 위해 *bg를 입력합니다.
실행 결과 [1] + sleep 10 &는 작업 번호와 함께 백그라운드에서 실행되고 있음을 알려줍니다.
Ctrl + Z (^Z) | 포그라운드에 실행 중인 작업 일시 중지 (일시 중지 후 bg 명령 실행 가능) |
bg | 포라운드의 작업을 백그라운드로 이동 |
4. 백그라운드 프로세스 종료 방법
4-1. 포그라운드로 가져와 종료
$ sleep 10 &
[1] 12345
$ fg %1
^C
위 예시는 *fg 명령을 통해 백그라운드의 1번 작업을 포그라운드로 가져옵니다.
이후 Ctrl + C를 통해 포그라운드에서 실행 중인 작업을 종료합니다.
fg | 백그라운드의 작업을 포그라운드로 이동 |
fg (+) | 백그라운드 작업 중 + (마지막 값)을 포그라운드로 이동 |
fg - | 백그라운드 작업 중 - (뒤에서 두 번째 값)을 포그라운드로 이동 |
fg n | 백그라운드 작업 중 n번을 포그라운드로 이동 |
Ctrl + C (^C) | 포그라운드에 실행 중인 작업 (강제) 종료 |
4-2. kill 명령을 이용한 종료 : 작업 번호
$ jobs
[1] + Running sleep 10 &
$ kill %1
[1] + Terminated sleep 10
kill 명령어는 프로세스를 강제 종료하는 명령어입니다. 여기서 %1은 백그라운드로 실행된 첫 번째 작업을 의미합니다.
위와 같이 kill %작업번호 명령어를 통해 해당 작업을 종료할 수 있습니다.
jobs | 백그라운드에서 실행 중인 쉘 작업 목록을 확인 |
4-3. kill 명령을 이용한 종료 : PID
$ ps -ef | grep sleep
user 12345 ...
$ kill 12345
[1] + Terminated sleep 10
먼저 ps -ef 명령어와 |(파이프)를 통해 sleep 명령어로 생성된 백그라운드 프로세스를 확인합니다.
해당 프로세스의 PID를 알아내어, 해당 작업을 종료할 수 있습니다.
4-4. killall 명령을 이용한 종료
$ killall -9 sleep
killall 명령어를 통해 sleep 명령인 모든 작업을 종료할 수 있습니다.
*-9 옵셥을 통해 강제 종료할 수도 있습니다.
5. 백그라운드 프로세스와 포그라운드 프로세스의 차이
포그라운드 프로세스는 실행되는 동안 사용자와 상호 작용하며, 입력을 받고 출력을 출력장치로 보내는 작업을 수행합니다.
백그라운드 프로세스는 사용자와 상호작용 없이 실행되며, 시스템 자원을 사용해 그 성능 향상하는 역할을 수행합니다.
🥑 마무리
이상으로 백그라운드 프로세스에 대해 알아보았습니다.
백그라운드 프로세스는 많은 프로그램에서 필수적으로 사용되는 기능 중 하나이므로,
이에 대한 이해를 통해 개발과 시스템 관리에 큰 도움이 될 것 같습니다. 🥑
(모든 내용을 담지 못했으나 필수적인 내용을 담았으니, 저의 글에 더하여 책도 함께 찾아보시면 좋을 것 같습니다.)