난 달린다 ps -ejH | less
. 출력에는 ps
및 less
도 포함됩니다.
이유는 무엇입니까? 나는 그것이 다음과 같이 작동할 것이라고 생각했다:
- 먼저
ps
실행되고 해당 순간에 존재하는 모든 프로세스가 나열됩니다. - 그런 다음 의 출력이
ps
에 공급됩니다less
.
그러나 이 논리에 따르면 not도 의 출력에 나타나서는 ps
안 됩니다 .less
ps
그렇다면 이러한 프로세스가 의 출력에 포함되는 이유는 무엇입니까 ps
? ps
내가 설명한 것과 조금 다르게 작동 합니까 ?
답변1
그만큼껍데기파이프의 끝을 설정하기 위해 두 가지를 모두 시작하므로 ps
파이프의 다른 쪽 끝에서 프로세스뿐만 아니라 자체도 볼 수 있습니다.
답변2
"그러나 이 논리에 따르면 ps의 출력에는 ps도 그 이하도 나타나서는 안 됩니다."
예, 둘 다 나타나기 때문에 논리가 잘못되었습니다. Un*x 셸에서 명령을 실행할 때 실제로 셸에서 실행되는 경우는 거의 없습니다. 해당 명령을 실행하기 위해 별도의 프로세스가 분기됩니다.
두 명령을 함께 파이프하면 두 명령 모두 별도의 프로세스에서 실행되고 첫 번째 명령의 stdout은 두 번째 명령의 stdin에 연결됩니다.
따라서 ps|less를 실행한 직후에는 3개의 프로세스가 생성됩니다. 하나는 쉘을 실행하고, 하나는 ps를 실행하고, 하나는 less를 실행합니다. 출력은 ps에 의해 생성되므로 less에 의해 병렬로(필요에 따라 시간 분할) 작업됩니다. 두 명령 모두 버퍼링을 최소화하면서 순차적이 아닌 병렬로 실행됩니다.
ps는 프로세스 목록을 통해 작업하면서 자신과 그 이하, 상위 쉘, 상위 쉘의 상위 등을 찾아서 init까지 표시합니다. 그리고 시스템의 다른 모든 것. 이것이 출력에 ps와 less가 모두 포함되는 이유입니다.
답변3
사용
ps -ef | grep [l]ess
덜 피하기 위해.
[l]ess
정규식으로는 일치less
하지만 고정 문자열로는 일치하지 않습니다.