![프로세스에서 `ps -e | less`에 "less"가 표시되는 이유는 무엇입니까? [복사]](https://linux55.com/image/89372/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%97%90%EC%84%9C%20%60ps%20-e%20%7C%20less%60%EC%97%90%20%22less%22%EA%B0%80%20%ED%91%9C%EC%8B%9C%EB%90%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
난 달린다 ps -ejH | less
. 출력에는 ps
및 도 포함됩니다 less
.
이유는 무엇입니까? 나는 그것이 다음과 같이 작동할 것이라고 생각한다:
- 먼저
ps
실행되고 해당 시점에 존재하는 모든 프로세스가 나열됩니다. - 그런 다음 의 출력이
ps
공급됩니다less
.
그러나 이 논리에 따르면 두 가지 모두 의 출력에 나타나서 는 안 ps
됩니다 .less
ps
그렇다면 이러한 프로세스가 출력에 포함되는 이유는 무엇입니까 ps
? ps
제가 설명한 것과 조금 다르게 작동하나요?
답변1
이것껍데기두 가지 모두를 시작하여 파이프의 양쪽 끝을 설정하면 ps
파이프의 다른 쪽 끝에서 자신과 프로세스를 볼 수 있습니다.
답변2
"그러나 이 논리에 따르면 ps의 출력에는 ps도 less도 나타나지 않아야 합니다."
예, 모두 나타나기 때문에 논리가 잘못되었습니다. Un*x 셸에서 명령을 실행할 때 실제로 셸에서 실행되는 명령은 거의 없습니다. 명령을 실행하려면 별도의 프로세스를 포크하십시오.
두 명령을 함께 파이프하면 두 명령이 별도의 프로세스에서 시작되고 첫 번째 명령의 표준 출력이 두 번째 명령의 표준 입력에 연결됩니다.
따라서 ps|less를 실행한 직후 세 개의 프로세스가 나타납니다. 하나는 셸을 실행하고, 하나는 ps를 실행하고, 하나는 less를 실행합니다. 출력은 ps에 의해 생성되므로 덜 병렬로 처리됩니다(필요에 따라 시간 분할). 두 명령은 버퍼링을 최소화하면서 순차적이 아닌 병렬로 실행됩니다.
ps는 프로세스 목록을 탐색하면서 자신과 그 이하뿐만 아니라 상위 쉘, 상위 쉘의 상위 쉘 등을 찾아서 표시합니다. 그리고 시스템의 다른 모든 것. 이것이 바로 출력에 ps 이하가 포함되는 이유입니다.
답변3
사용
ps -ef | grep [l]ess
덜 피하기 위해.
[l]ess
less
정규식과 일치하지만 고정 문자열과 일치 하지 않습니다.