파이프라인의 명령이 동시에 실행됩니까? [복사]

파이프라인의 명령이 동시에 실행됩니까? [복사]

command1 | command2다음 과 같은 파이프라인에서

  • 명령이 동시에 실행되는지(즉, 동일한 수명 주기를 갖는지) 또는
  • command1이 종료되면 command2가 실행되기 시작합니다. 또는
  • 다른 것이 있나요?

명령 프로세스가 프로세스 그룹을 형성한다는 말을 들었을 때 내 질문이 생겼습니다. 생명주기가 다르다면 명령 프로세스의 프로세스 그룹은 의미가 없는 것이 아닐까?

답변1

이러한 프로세스는여기 간다동시에 동시에 실행되지만 반드시 그럴 필요는 없습니다.멈추다동시에. 셸은 다음과 같은 경우 전체 파이프라인이 종료된 것으로 간주하고 새 프롬프트를 표시합니다.둘 다프로세스가 종료되었습니다.

command2do 전에 종료 command1하거나 표준 입력 스트림을 닫은 다음 command1출력을 쓰려고 하면 해당 출력은 아무데도 가지 않습니다 . 그러면 기본 동작은 abort 인 command1신호 SIGPIPE가 수신됩니다 command1. 그러나 command1계속 실행되도록 이 기본값을 무시할 수 있습니다. 이 경우 출력에 쓰려고 하면 정상적인 I/O 오류( EPIPE)가 생성되고 필요에 따라 반응할 수 있습니다.

답변2

"|"` 일명 "파이프라인"....파이프라인을 사용하면 한 프로그램의 출력을 다른 프로그램의 입력으로 사용할 수 있습니다." 따라서 다음과 같이 하면 됩니다.

user$ cat SHAHashing.java | grep main
    public static void main(String[] args)throws Exception

보시다시피, cat은 먼저 페이지 내용 "THE OUTPUT"을 표시하기 위해 실행된 다음 문자열 main을 grep합니다.

CAT이제 다음과 같이 오타를 냈다고 가정해 보겠습니다 .

user$ cats SHAHashing.java | grep main
-bash: cats: command not found

"잘못된 명령" 출력이 없습니다. grep은 실행되지만 아무 작업도 수행하지 않습니다. 그래서....cats는 첫 번째 명령이 "exit 1" 상태로 종료되도록 합니다.

관련 정보