ps 명령을 통해 다른 스크립트에서 시작된 스크립트를 볼 수 없습니다

ps 명령을 통해 다른 스크립트에서 시작된 스크립트를 볼 수 없습니다

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.

이는 외부에서는 불가능하거나 거의 불가능할 수 있습니다.

관련 정보