ps 출력/파이프라인 실행 순서

ps 출력/파이프라인 실행 순서

난 달린다 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가지가 있습니다:pssomethinghere

  1. 번호만 필요한 경우 사용할 수 있습니다.pgrep -l somethinghere
  2. 더블grep ps aux | grep somethinghere | grep -v grep(자주 만나는데 별로 안 좋아함)
  3. 정규식을 만들어 보세요somethinghere ps aux | grep [s]omethinghere

관련 정보