쉘관련...ps 명령시 명령자체쉘(자식쉘)도 출력이 되는게 있고

innu의 이미지

그러니까... 예를들어서..

# ps -ef | grep proftpd

하면

nobody 소유의 proftpd 프로세스만 출력되는경우도 있고...

ps 명령자체(자식쉘에서 실행되는...)도 함께 출력되는 경우가 있습니다.
제가 계속해서 같은 명령을 날리니까 어떤거는 proftpd 데몬프로세스만 출력되는것도 있고 ps 프로세스도 함께 출력되는것도 있습니다.

왜 이런 현상이 생길까요?
ps가 그렇게 프로그램 되어있는것일까요?

pynoos의 이미지

ps -ef | grep blah
를 쉘이 해석하고 실행 할 때, 다음과 같은 현상이 일어나서 인것 같습니다.

다음과 같은 경우는 grep이라는 말이 나오지 않습니다.

1) parsing
2) make pipe
3) fork and exec 'ps'
4) *Context switch to ps*
5) ps는 process 나열 stdout으로 출력
6) * Context swtich to shell *
7) fork and exec 'grep'
8) stdout은 pipe로 dup되어 있을 것이고, grep 의 입력으로 전달됨
9) grep 수행

Context swtich가 일어나지 않았다면, grep blah 라는 말이 ps의 결과중에 있으므로 화면에 출력되겠지요.