난 달린다 ps aux | grep somethinghere
.
출력은 grep somethinghere
실행 중인 프로세스로 표시됩니다.
내 질문은 ps aux
먼저 완료한 다음 grep somethinghere
출력을 실행하면 안 되는 것입니까? 어쩌면 완료할 필요가 없을 수도 있지만 ps
(둘 사이에 파이프가 있음) 실행이 아닌 첫 번째 프로세스로 실행되어야 합니다 grep
.
출력은 grep
이전에 실행되었음을 의미합니다 ps
!
이건 어때? ps
출력이 파이프로 연결되어야 하기 때문에 먼저 실행하면 안 되나요 ? 동시에 실행하더라도 출력에 grep
항상 표시되는 이유는 무엇입니까 ? grep
가끔 보이지 않나요 grep
?
답변1
너는 좀 봐야 해이 페이지.
편집, 이제 귀하가 무엇을 요구하는지 이해합니다.
아마도이것더 잘 설명하는 데 도움이 될 것입니다.
명령이 실행되는 순서는 실제로 중요하지 않으며 보장되지 않습니다. Pipe(), fork(), dup() 및 execve()의 난해한 세부 사항은 제쳐두고, 쉘은 먼저 프로세스 간에 데이터가 흐르는 파이프인 파이프를 생성한 다음 프로세스에 연결된 파이프로 끝나는 프로세스를 생성합니다. . 실행 중인 첫 번째 프로세스는 두 번째 프로세스의 입력을 기다리는 것을 차단하거나 두 번째 프로세스가 파이프에서 데이터 읽기를 시작할 때까지 기다리는 것을 차단할 수 있습니다. 이러한 대기 시간은 임의로 길어질 수 있지만 문제가 되지 않습니다. 프로세스가 어떤 순서로 실행되든 결국 데이터는 전송되고 모든 것이 잘 작동합니다.
답변2
OP는 " grep somethinghere
출력 목록에서 프로세스를 제거하는 방법"을 의미한다고 생각합니다. 이를 수행하는 방법은 12가지가 있습니다:ps
somethinghere
- 번호만 필요한 경우 사용할 수 있습니다.
pgrep -l somethinghere
- 더블grep
ps aux | grep somethinghere | grep -v grep
(자주 만나는데 별로 안 좋아함) - 정규식을 만들어 보세요
somethinghere
ps aux | grep [s]omethinghere