![jobs 명령이 쉘 스크립트에서 작동하지 않는 이유는 무엇입니까?](https://linux55.com/image/88649/jobs%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
명령 프롬프트에서 실행 하면 jobs -l
실행 중인 작업의 상태가 표시되지만 ./tmp.sh 파일에서 실행하면
#! /bin/bash
jobs -l
빈 출력을 보여줍니다.
왜 그런 겁니까? 쉘 스크립트 내에서 특정 작업의 상태에 대한 정보를 어떻게 얻을 수 있습니까?
답변1
jobs
채용공고 보기현재 쉘에서 관리됨. 스크립트는 자체 셸 내에서 실행되므로 jobs
스크립트 셸에서 관리하는 작업만 표시됩니다.
실제로 보려면 다음을 실행하세요.
#!/bin/bash
sleep 60 &
jobs -l
스크립트 내부의 쉘 스크립트 이전에 시작된 "작업"에 대한 정보를 보려면 이를 일반 프로세스로 취급하고 사용해야 합니다 ps
. 스크립트 내의 변수를 사용하여 상위 셸(있는 경우 스크립트를 시작한 셸)에서 시작된 프로세스로 자신을 제한 $PPID
하고 동일한 상위 PID를 공유하는 프로세스를 찾을 수 있습니다.