2013-07-16 2 views
0

때때로 프로세스를 따라야하고 항상 bash 스크립트가 pid=$1입니다. 내가 아는 한, 특정 프로세스를 실행하고있는 첫 번째 셸 인스턴스에 보낸 프로세스 ID를 가져와야하며 나중에이를 사용할 수도 있습니다 (예 : 죽이거나 메모리 사용을 따르거나 다른 것으로). pid=$0은 현재 인스턴스 (bash)를 얻고 pid=$!은 최신 인스턴스를 가져와야합니다. (내가 틀렸다면 올바른가하십시오)정확하게 프로세스 ID를 얻으려면

문제는 다음과 같습니다마다 내가 pid=$1 명령을 실행해야 pid는 아무것도 echo $pid 또는 echo ${pid} 인쇄 및 빈 줄을 얻을 수 없다, 나는 항상 공상에 pid=$!를 사용하여 수행하는 방법이 필요합니다 대신, 내 프로세스 ID를 얻는 유일한 방법이기 때문입니다. 아무도 왜 내 터미널의 행동을 알고 있니?

+0

'$ 0'과'$ 1'은 스크립트 (또는 함수)에 제공되는 위치 매개 변수를 얻습니다. 이들이 PID가 되려면 스크립트/함수가 인수로 PID를 전달해야합니다. 아, 그리고'$ 0'은 일반적으로 스크립트/함수의 이름이기 때문에 결코 PID가 아닐 것입니다 - 실제 인수는'$ 1'로 시작합니다 ... – twalberg

+0

@twalberg 스크립트 파일에서만 작동합니까? 터미널에서 직접 실행하려고하면 작동하지 않는 것입니까? – rafa

+0

일반적으로 터미널에서 실행중인 셸은 인수없이 호출되므로'$ 1'은 비어 있고'$ 0'은 셸 이름 만 포함합니다. 어떤 점에서 그것을 변경하기 위해'set'을 사용했을 수도 있습니다. 'echo "$ 1"'등 ... – twalberg

답변

4

$$ 당신에게 스크립트를 제공해야한다 (이것은 페도라 리눅스 민트 나에 하나 무슨 일이 일어나고) PID

$PPID 주석의


대답 PID 당신에게 호출자 (부모)를 제공해야합니다

sleep 100 & 
sleeppid=$! 
echo "PID=$sleeppid" 
+0

예, 예를 들어'sleep 100 &'을 실행하면 어떻게해야합니까? – rafa

+0

'$!'예를 들어 대답을보십시오 – Eun

+1

마지막으로 시작된 백그라운드 프로세스의 PID를 얻기 위해'$! '를 사용하십시오. – anishsane

관련 문제