작업이 스크립트의 명령을 나열하지 않는 이유

작업이 스크립트의 명령을 나열하지 않는 이유

백그라운드에서 일부 프로그램을 실행하는 스크립트가 있는데 실행한 후에 'jobs' 명령으로 나열되지 않습니다. 왜 이런거야?

(./m_prog -t m_prog1 m_config) &
(./m_prog  -t m_prog2  m_config) &
(./m_prog  -t m_prog3  m_config) &

하지만 터미널에서 각각을 실행하면 '작업'에 나타납니다.

스크립트에서 실행되는 명령에서 동일한 효과를 얻으려면 어떻게 해야 합니까?

답변1

jobs는 작업을 생성한 셸의 인스턴스화에만 작동합니다. jobs npid가 아닌 숫자를 사용하십시오. 셸이 스크립트(또 다른 새 프로세스) 내에서 실행되면 스크립트를 시작한 이전 셸인 작업(이전 셸에서 실행됨)은 더 이상 새 셸에서 작업 # 1을 참조할 수 없습니다.

왜? 현재 쉘이 자체 작업 #1을 가질 수 있기 때문입니다. UNIX/Linux는 프로세스 그룹 또는 세션이라고 알려진 것을 유지 관리합니다. 세션의 그룹 리더는 tty를 소유하고 키보드를 통해 상호 작용하는 프로세스입니다. 매뉴얼에서 setid() 함수에 대한 설명을 찾아보세요. 프로세스가 시작되었고 여전히 이전 상위 쉘(리더)에서 하위로 실행되는 경우 jobs 명령이 작동합니다. 그렇지 않으면 아니오.

관련 정보