
Bash 터미널에서 이 명령을 실행합니다.
while [ 0 ]; do
i=1;
echo $i;
done
이 루프를 실행하기 전에 gnome-terminal의 다른 탭에서 다음을 수행했습니다.
$ps aux | wc -l
192
루프가 계속 실행되는 동안 다시 실행했습니다.
$ps aux | wc -l
192
내 질문 -
while 루프가 PID를 얻지 못하는 이유는 무엇입니까?
while 루프 내에서 실행되는 각 명령의 PID를 얻는 방법은 무엇입니까?
답변1
while
외부 명령이 아닌 쉘 키워드이기 때문에 자체 PID를 얻지 못합니다. PID가 프로세스로 나열됩니다bash
. PID를 얻으려면echo $$
내부while
루프를 삽입하고ps aux | grep '[b]ash'
PID를 일치시키는 데 사용하십시오.명령이 쉘 내장이 아닌 경우, 예를 들어 , 를 사용하여 일반적인 방법으로 PID를 얻을 수 있습니다
ps
.pgrep
PPID(상위 프로세스 ID) 필드에는 일반적으로 실행 중인 셸의 PID가 표시됩니다.예를 들어.
foobar
셸 루프 내부의 명령에 대한 세부정보를 얻으려면 다음을 수행할 수 있습니다.ps -ef | grep '[f]oobar'
또는
ps aux | grep '[f]oobar'
또는
pgrep
:pgrep 'foobar'
여러 셸 프로세스가 실행되므로 세부 사항을 고려하고 PPID 필드가 셸 PID와 일치하는지 확인해야 합니다.
루프를 실행하는 경우 프로세스 테이블에 있는 프로세스의 가용성은 해당 프로세스가 실행된 기간과 프로세스 테이블을 확인하는 시기에 따라 달라집니다.
답변2
while
echo
내장 bash 쉘 명령이므로 별도의 PID가 없습니다 . 이 명령을 sleep 1
명령 목록에 추가해 보십시오 . 그러면 에 새 명령이 표시됩니다 ps
.