백그라운드 작업 확인하기 — jobs 명령어

터미널에서 &로 뭔가를 백그라운드에 올려두고 잊어버린 적이 있습니다. ps aux | grep ...로 찾으려 하면 시스템 전체 프로세스가 쏟아집니다. 현재 세션에서 내가 올린 것만 보고 싶을 때 쓰는 게 jobs입니다.

jobs는 현재 셸 세션의 백그라운드 작업 목록을 보여줍니다. Windows 작업 표시줄처럼 "이 세션에서 내가 실행한 것 중 지금 백그라운드에 있는 것"만 보여줍니다. 시스템 전체가 아닙니다.

Note

UNIX에서 Job은 Process의 집합입니다. Job의 ID는 Process Group ID를 의미합니다.

Note

macOS Sonoma, zsh에서 테스트했습니다. zsh는 확장 기능이 있으며 man zshbuiltins에서 자세한 내용을 확인할 수 있습니다.

기본 사용

백그라운드 작업을 하나 만들어봅니다.

sleep 100 &

&는 명령어를 현재 세션의 백그라운드로 보냅니다. 셸은 바로 다음 입력을 받을 수 있습니다.

jobs를 실행하면 이렇게 나옵니다.

jobs
[1] + 12345 Running sleep 100 &

각 필드의 의미입니다.

필드 의미
[1] 작업 번호 fg %1, kill %1 등에서 사용
+ 현재 기본 작업 fg, bg 기본 대상
12345 Process Group ID -l 옵션에서 표시됨
Running 상태 아래 참조
sleep 100 & 명령어 실행한 명령 그대로

+는 다음 fg/bg 호출의 기본 대상, -+ 작업이 종료되면 기본이 될 다음 후보입니다.

상태값

jobs 출력에서 볼 수 있는 상태입니다.

상태 의미
Running 실행 중
Done 정상 종료 (exit 0)
Done(code) 비정상 종료 (exit code)
Stopped SIGTSTP로 중단 (Ctrl+Z)
Stopped (SIGSTOP) SIGSTOP으로 중단
Stopped (SIGTTIN) 백그라운드에서 터미널 입력 대기
Stopped (SIGTTOU) 백그라운드에서 터미널 출력 대기

옵션

jobs [-l | -p] [job_id...]
  • -l: Process Group ID 포함해서 출력
  • -p: Process Group ID만 출력 (스크립트에서 PID 추출할 때 유용)

job_id를 지정하면 해당 작업만 표시합니다. 생략하면 전체를 보여줍니다.

zsh 버그

Important

zsh 5.9 (x86_64-apple-darwin23.0)에서 jobs -p가 PID만 출력해야 하는데 -l과 동일하게 전체 정보를 출력하는 버그가 있습니다. bash에서는 -p가 정상 동작합니다. PID만 필요하다면 bash를 사용하거나 jobs -l | awk '{print $3}'로 파싱하는 게 현실적입니다.

Created : 23. 10. 07. Modified : 26. 04. 13.
Designed by