![FIFO의 프로세스 교체 또는 명령 실행은 언제 시작되고 종료됩니까?](https://linux55.com/image/130227/FIFO%EC%9D%98%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EA%B5%90%EC%B2%B4%20%EB%98%90%EB%8A%94%20%EB%AA%85%EB%A0%B9%20%EC%8B%A4%ED%96%89%EC%9D%80%20%EC%96%B8%EC%A0%9C%20%EC%8B%9C%EC%9E%91%EB%90%98%EA%B3%A0%20%EC%A2%85%EB%A3%8C%EB%90%A9%EB%8B%88%EA%B9%8C%3F.png)
Bash에서 프로세스 대체 명령은 언제 실행을 시작하고 완료합니까? 예를 들어
언제
command1
시작command2 >(command1)
하고 끝나나요?언제
command3
시작command4 <(command3)
하고 끝나나요?
FIFO의 명령은 언제 실행을 시작하고 종료합니까? 예를 들어
- 언제
prog2
시작mkfifo fifo1; prog2 < fifo1 &; prog1 > fifo1;
하고 끝나나요? - 언제
prog3
시작mkfifo fifo2; prog3 > fifo12 &; prog2 < fifo2;
하고 끝나나요?
감사해요.
답변1
Bash에서 실험적으로:
$ strace -tttfe execve bash -c 'sleep 5 <(sleep 6)'
1522025733.188859 execve("/bin/bash", ["bash", "-c", "sleep 5 <(sleep 6)"], [/* 41 vars */]) = 0
strace: Process 24248 attached
[pid 24247] 1522025733.215188 execve("/bin/sleep", ["sleep", "5", "/dev/fd/63"], [/* 41 vars */]) = 0
strace: Process 24249 attached
[pid 24249] 1522025733.218331 execve("/bin/sleep", ["sleep", "6"], [/* 41 vars */]) = 0
sleep: invalid time interval ‘/dev/fd/63’
Try 'sleep --help' for more information.
[pid 24247] 1522025733.227459 +++ exited with 1 +++
[pid 24249] 1522025739.230933 +++ exited with 0 +++
1522025739.232270 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24249, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
1522025739.233169 +++ exited with 0 +++
$ strace -tttfe execve bash -c 'sleep 5 >(sleep 6)'
1522025752.162876 execve("/bin/bash", ["bash", "-c", "sleep 5 >(sleep 6)"], [/* 41 vars */]) = 0
strace: Process 24253 attached
[pid 24252] 1522025752.188413 execve("/bin/sleep", ["sleep", "5", "/dev/fd/63"], [/* 41 vars */]) = 0
strace: Process 24254 attached
[pid 24254] 1522025752.191032 execve("/bin/sleep", ["sleep", "6"], [/* 41 vars */]) = 0
sleep: invalid time interval ‘/dev/fd/63’
Try 'sleep --help' for more information.
[pid 24252] 1522025752.197213 +++ exited with 1 +++
[pid 24254] 1522025758.197114 +++ exited with 0 +++
1522025758.197959 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24254, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
1522025758.198820 +++ exited with 0 +++
command1
및 각각 이후에 시작합니다 command3
.command2
command4
그들은 나가거나 죽는 조건이 충족되는 한 나가게 됩니다.
makefifo fifo1; prog2 < fifo1 &; prog1 > fifo1;
makefifo fifo2; prog3 > fifo12 &; prog2 < fifo2;
적어도 bash에서는 구문 오류입니다 . 그렇지 않은 경우에도 리디렉션이 없을 때와 다른 실행 순서를 발생시키는 리디렉션에는 아무것도 표시되지 않습니다.