CHECKING BACKGROUND JOBS

UNIXUNIX LIKE에서 Job control 일부인 jobs 명령어를 설명합니다.

jobs는 현재 shellbackground에서 실행중인 job을 확인하는 명령어입니다.

Windows와 비교하면,
jobstaskbar(작업 표시줄)과 비슷한,
현재 세션에서 실행중이만 foreground에서는 볼 수 없는,
최소화되어 background에서 실행중인 프로그램을 확인하는 행위와 같습니다.

🔵 NOTE

UNIX에서 JobProcess의 집합을 의미합니다. Job의 PID는 Process Group ID를 의미합니다.

🔵 NOTE

MacOS, Sonoma에서 zsh를 사용하여 테스트하였습니다.
zsh는 확장 기능이 있으며, man zshbuiltins에서 자세한 정보를 확인할 수 있습니다.

🔵 NOTE

이 문서는 UNIX 공식 그룹인 THE Open GROUP에서 제공하는 The Open Group Base Specifications Issue 7jobs 설명을 번역했으며, 사용자가 알아야 할 부분만 간략하게 설명합니다.

SYNOPSIS

  • [ ] (대괄호)는 생략 할 수 있습니다.
  • | (파이프)는 여러 옵션 중 하나를 선택할 수 있습니다.
  • ... (마침표 세 개)는 여러 인수를 지정할 수 있습니다.
jobs [-l| -p][job_id...]

OPTIONS

  • -l
    (영어 소문자 L) 나열된 각 작업에 대한 더 많은 정보를 제공합니다. 이 정보에는 작업 번호, 현재 작업, 프로세스 그룹 ID, 상태, 및 작업을 형성한 명령이 포함됩니다.

  • -p
    선택한 작업의 프로세스 그룹 리더에 대한 프로세스 ID만 표시합니다.

OPERANDS

  • job_id
    상태를 표시할 작업을 지정합니다. job_id가 지정되지 않으면 모든 작업에 대한 상태 정보가 표시됩니다. job_id의 형식은 XBD Job Control Job ID에 설명되어 있습니다.

STDOUT

-p 옵션이 지정된 경우,
출력은 각 프로세스 ID에 대해 한 줄로 구성됩니다.

"%d\n", <process ID>

-l 옵션이 지정되지 않은 경우,
출력은 다음 형식의 일련의 줄로 구성됩니다.

"[%d] %c %s %s\n", <job-number>, <current>, <state>, <command>

여기서 필드는 다음과 같습니다:

  • <job-number>

    • wait, fg, bg, 및 kill 유틸리티에 프로세스 그룹을 식별하는 데 사용할 수 있는 번호입니다.
    • 이러한 유틸리티를 사용하여 작업 번호 앞에 %를 붙여 작업을 식별할 수 있습니다.
  • <current>

    • 문자 +fg 또는 bg 유틸리티에 대한 기본값으로 사용될 작업을 식별합니다.
      이 작업은 job_id %+ 또는 "%%"를 사용하여 지정할 수도 있습니다.
    • 문자 -는 현재 기본 작업이 종료되면 기본이 될 작업을 식별합니다.
      이 작업은 job_id %-를 사용하여 지정할 수도 있습니다.
    • 다른 작업의 경우, 이 필드는 space(공백) 입니다.
    • 최대 하나의 작업만 +로, 최대 하나의 작업만 -로 식별할 수 있습니다.
    • 어떤 작업이 중단된 경우, 현재 작업은 중단된 작업이어야 합니다.
    • 최소 두 개의 작업이 중단된 경우, 이전 작업도 중단된 작업이어야 합니다.
  • <state>
    다음 문자열 중 하나입니다 (POSIX locale에서):

    • Running
      작업이 신호에 의해 중단되지 않았으며 종료되지 않았음을 나타냅니다.
    • Done
      작업이 완료되었으며 종료 상태가 0을 반환했음을 나타냅니다.
    • Done(code)
      작업이 정상적으로 완료되었으며 지정된 0이 아닌 종료 상태, code,로 종료되었음을 나타냅니다.
    • Stopped
      작업이 SIGTSTP 신호에 의해 중단되었음을 나타냅니다.
    • Stopped (SIGTSTP)
      작업이 SIGTSTP 신호에 의해 중단되었음을 나타냅니다.
    • Stopped (SIGSTOP)
      작업이 SIGSTOP 신호에 의해 중단되었음을 나타냅니다.
    • Stopped (SIGTTIN)
      작업이 SIGTTIN 신호에 의해 중단되었음을 나타냅니다.
    • Stopped (SIGTTOU)
      작업이 SIGTTOU 신호에 의해 중단되었음을 나타냅니다.
  • <command>

    • 쉘에 제공된 관련 명령입니다.

-l 옵션이 지정된 경우,
프로세스 그룹 ID를 포함하는 필드가 <state> 필드 앞에 삽입됩니다.
또한 프로세스 그룹 내의 더 많은 프로세스가 별도의 줄에 출력될 수 있으며, 프로세스 ID와 <command> 필드만 사용합니다.

EXAMPLE

먼저 단순한 job을 생성하는 명령어를 shell에서 입력합니다.

sleep 100 & 

10분 동안 대기 하고 소멸하는 명령어인 sleep을,
&(앰퍼샌드)를 이용하여 background에서 실행하는 명령어입니다.

🔵 NOTE

&(앰퍼샌드)는 현재 세션에서 백그라운드로 프로세스를 실행하는 명령어 입니다.

no option으로 jobs 명령어를 실행한 결과는 다음과 같습니다.

명령어 입력

jobs

출력

[1] + 12345 Running sleep $((60 * 10)) &

zsh를 이용해 jobs 명령어를 실행한 결과는 다음과 같습니다.
zshjob이 종료되면 Done이 출력 됩니다.

asciicast

🟣 IMPORTANT

zsh 5.9 (x86_64-apple-darwin23.0)jobs -p를 사용하면 프로세스 번호만 출력해야하는데 버그가 있어 -l 옵션과 동일한 기능을 합니다. bashjobs -p가 프로세스 번호만 정상 출력 합니다.