2011-01-24 3 views
0

두 개의 스크립트가 있습니다. 하나는 입력으로 몇 개의 파일 이름을 사용하고 파이프에 데이터를 씁니다 (필자가 작성한 프로그램의 인수로 파이프를 전달합니다). 다른 하나는 명명 된 파이프를 입력으로 사용하여 첫 번째 스크립트를 호출 한 다음 다른 프로그램을 호출하여 파이프에서 데이터를 처리합니다.BASH에서 명명 된 파이프가 아래 첨자로 열리기를 기다리고 있습니까?

내 문제는 내 파이프가 멈추고 내가 생각하는 바가 첫 번째 bash 스크립트가 두 번째 스크립트에서 백그라운드로 호출되어서 소비자 프로세스를 즉시 시작하는 것입니다. 그래서 독자들 작가가 (아래 첨자로) 앞에 열리고 있는데, 이는 실속을 초래할 수 있습니까?

명명 된 파이프에서 동기화하고 bash에서 열릴 때까지 기다리는 방법이 있습니까?

+0

독자가 문제를 일으키고 있습니까? 한 방향으로 파이프를 사용하고 있습니까 (교착 상태가 발생하지 않도록)? 파이프가 이미 원하는 동기화를 수행하고있는 것처럼 보입니다. –

+0

필자는 명명 된 파이프가 제대로 작동하려면 읽기 끝내기 전에 쓰기 끝을 열어야한다고 생각합니다. 잘못인가? 제 문제는 일들이 시작과 동시에 일시적으로 멈추는 것이 아니라 멈추고 계속 갈 수 없다는 것입니다 ... –

답변

0

나는 그것이 당신의 문제라고 생각하지 않습니다.

생산자가 소비자보다 나중에 시작하면 큰 문제가되지 않습니다.

예 :

창 1

$ mkfifo foo.pipe 
$ cat foo.pipe 
(hangs) 

창 2

$ echo 'something' > foo.pipe 

창 1

something 
(exits) 

아마도 문제는 하나 개의 프로세스의 출력을 소모된다는 것이다 에프 ifo, 생산자가 끝나면, 당신은 fifo에서 다시 읽으려고합니다.

이 경우 무한정 중단됩니다.

위의 순서 후 : 다른 echo something > foo.pipe를 실행할 때까지

창 1

$ cat foo.pipe 

이 중단됩니다.

관련 문제