while 루프의 PID를 찾는 방법은 무엇입니까?

while 루프의 PID를 찾는 방법은 무엇입니까?

Bash 터미널에서 이 명령을 실행합니다.

  while [ 0 ]; do 
    i=1; 
    echo $i; 
  done

이 루프를 실행하기 전에 gnome-terminal의 다른 탭에서 다음을 수행했습니다.

$ps aux | wc -l
192

루프가 계속 실행되는 동안 다시 실행했습니다.

$ps aux | wc -l
192

내 질문 -

  1. while 루프가 PID를 얻지 못하는 이유는 무엇입니까?

  2. while 루프 내에서 실행되는 각 명령의 PID를 얻는 방법은 무엇입니까?

답변1

  1. while외부 명령이 아닌 쉘 키워드이기 때문에 자체 PID를 얻지 못합니다. PID가 프로세스로 나열됩니다 bash. PID를 얻으려면 echo $$내부 while루프를 삽입하고 ps aux | grep '[b]ash'PID를 일치시키는 데 사용하십시오.

  2. 명령이 쉘 내장이 아닌 경우, 예를 들어 , 를 사용하여 일반적인 방법으로 PID를 얻을 수 있습니다 ps. pgrepPPID(상위 프로세스 ID) 필드에는 일반적으로 실행 중인 셸의 PID가 표시됩니다.

    예를 들어. foobar셸 루프 내부의 명령에 대한 세부정보를 얻으려면 다음을 수행할 수 있습니다.

    ps -ef | grep '[f]oobar'
    

    또는

    ps aux | grep '[f]oobar'
    

    또는 pgrep:

    pgrep 'foobar'
    

    여러 셸 프로세스가 실행되므로 세부 사항을 고려하고 PPID 필드가 셸 PID와 일치하는지 확인해야 합니다.

    루프를 실행하는 경우 프로세스 테이블에 있는 프로세스의 가용성은 해당 프로세스가 실행된 기간과 프로세스 테이블을 확인하는 시기에 따라 달라집니다.

답변2

whileecho내장 bash 쉘 명령이므로 별도의 PID가 없습니다 . 이 명령을 sleep 1명령 목록에 추가해 보십시오 . 그러면 에 새 명령이 표시됩니다 ps.

관련 정보