본문 바로가기
C.W.K.
Stream
Lesson 04 of 10 · published

작업 제어: bg, fg, jobs

~10 min · jobs, bg, fg

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

프롬프트 막지 않고 뭔가 돌리기

명령 끝에 &를 붙이면 셸은 그 명령을 백그라운드 작업으로 시작하고 프롬프트를 돌려줘. jobs는 현재 셸이 추적하는 작업을 보여 주며, fgbg는 그 작업을 전경으로 옮기거나 멈춘 상태에서 다시 실행해.

흐름

./long-build.sh &        # 백그라운드 시작
jobs                          # [N] 태그로 나열
fg %1                         # 작업 1을 포그라운드로 전환
Ctrl+Z                        # suspend
bg %1                         # background 재개
fg %1                         # 다시 foreground
kill %1                       # 종료

작업 ID와 PID를 구분해

%1은 현재 셸이 붙인 첫 번째 작업 번호라서 kill %1처럼 사용할 수 있어. 다른 셸에서 pskill을 쓸 때는 jobs -l로 실제 PID를 먼저 확인해.

disown으로 셸의 작업 표에서 빼기

셸과 터미널이 끝날 때 작업이 SIGHUP을 받는지는 셸 옵션과 작업 상태에 따라 달라져. disown은 셸의 작업 표에서 항목을 빼거나 HUP 처리 방식을 바꾸지만, 프로그램의 표준 입출력까지 터미널에서 분리해 주는 만능 해결책은 아니야. 오래 돌릴 작업은 tmux나 서비스 매니저가 더 관찰하기 쉬워.

언제 tmux로 갈아탈까

잠깐 명령을 멈추고 다른 작업을 할 때는 작업 control이 가벼워. 연결이 끊긴 뒤 다시 화면과 로그를 이어 봐야 하는 작업이라면 tmux 세션을 쓰고, 재부팅 뒤에도 자동으로 살아야 하는 서비스라면 운영체제 서비스 매니저에 맡겨.

작업 번호는 현재 셸 안에서만 통해

%1은 시스템 전체의 안정된 식별자가 아니라 지금 이 셸이 붙인 번호야. 다른 터미널에서는 같은 프로세스를 다른 번호로 보거나 전혀 작업으로 알지 못해. 셸 경계를 넘으면 PID와 명령줄을 다시 확인하고, 장기 운영에는 서비스 이름을 써.

백그라운드는 무인 운영과 달라

&는 프롬프트를 돌려줄 뿐 로그 회전, 재시작, 자원 제한, 실패 알림을 제공하지 않아. 사람 눈앞에서 잠깐 병렬로 돌리는 데는 충분하지만, 잊어도 되는 작업으로 만들려면 그 생명주기를 누가 소유하는지 따로 정해야 해.

Code

흐름 연습·bash
sleep 60 &
sleep 60 &
jobs                  # [1] [2]
fg %1                 # 포그라운드로 전환
# Ctrl+Z로 일시 중지
bg %1                 # 백그라운드에서 다시 실행
kill %1 %2            # 두 작업 모두 종료

External links

Exercise

sleep 30 &을 세 번 실행하고 jobs로 작업 번호를 확인해. fg %2로 두 번째 작업을 포그라운드로 가져와 Ctrl+Z로 멈춘 뒤 bg %2로 백그라운드 실행을 재개해. 마지막에는 각 작업 번호를 다시 확인하고 시험 작업만 종료해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.