test.sh라는 스크립트가 있습니다. 이는 아래와 같이 다른 스크립트 foo.sh를 호출합니다.
#!/bin/bash
echo "starting other script"
. ./foo.sh
foo.sh 스크립트는 다음과 같습니다:
#!/bin/bash
sleep 10
echo "running"
sleep 10
이제 터미널에서 다음을 수행합니다.
ps -def | grep foo.sh | grep -v grep
나는 결코 결과를 얻지 못합니다. 터미널에서 스크립트의 출력을 볼 수 있습니다. 문제 없습니다. 하지만 foo.sh가 실행 중인지 어떻게 확인할 수 있나요?
답변1
다음 foo.sh
과 같이 시작합니다 . ./foo.sh
.
쉘 스크립트 자체는 프로세스가 아닙니다. 이는 셸 인스턴스(즉, 프로세스)에 의해 해석됩니다.
.
source
현재 쉘 환경에서 명령을 실행하는 명령의 별칭입니다. 이는 ./foo.sh
이를 시작한 스크립트를 실행한 동일한 쉘에 의해 실행된다는 것을 의미합니다. 새로운 프로세스를 생성하지 않으므로 find it을 사용할 수 없습니다 ps
.
foo.sh
로 시작할 수 있습니다 ./foo.sh
. 이 경우 셸의 새 인스턴스, 즉 새 프로세스에 의해 실행됩니다.
그러나 수행하는 작업에 따라 ./foo.sh
두 경우 모두 완료 후 원본 셸의 실행이 다를 수 있습니다. 동일한 셸에서 실행될 때 foo.sh
변경되는 환경 변수는 원래 스크립트도 실행한 셸에 속합니다. 이를 변경하면 원본 스크립트에 영향을 미칠 수 있습니다.
별도의 스크립트에서 실행 하면 foo.sh
환경 변수에 대한 변경 사항이 원본 스크립트에 영향을 주지 않습니다. 그것들은 서로 다른 프로세스이며 아무것도 공유하지 않습니다.
foo.sh
그런데 실행 중인지 어떻게 확인할 수 있나요 ?
foo.sh
실행을 다시 시작하기 전에 완료될 때까지 기다리기 때문에 시작된 스크립트의 경우 이는 쉽습니다 foo.sh
.
이는 외부에서는 불가능하거나 거의 불가능할 수 있습니다.