Quando um comando em uma substituição de processo ou FIFO inicia e termina a execução?

0

Quando um comando em uma substituição de processo no bash começa e termina a execução?  Por exemplo.

  • quando command1 in command2 >(command1) inicia e termina a execução, respectivamente?

  • quando command3 in command4 <(command3) inicia e termina a execução, respectivamente?

Quando um comando em um FIFO inicia e termina a execução? Por exemplo.

  • quando prog2 in mkfifo fifo1; prog2 < fifo1 &; prog1 > fifo1; inicia e termina a execução, respectivamente?
  • quando prog3 in mkfifo fifo2; prog3 > fifo12 &; prog2 < fifo2; inicia e termina a execução, respectivamente?

Obrigado.

    
por Tim 26.03.2018 / 02:41

1 resposta

1

Experimentalmente, no 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 e command3 iniciam após command2 e command4 respectivamente.

Eles saem sempre que as condições para sair ou serem mortos são cumpridas.

makefifo fifo1; prog2 < fifo1 &; prog1 > fifo1; e makefifo fifo2; prog3 > fifo12 &; prog2 < fifo2; são erros de sintaxe, pelo menos no bash. Mesmo que não fosse, não vejo nada nos redirecionamentos que causariam uma ordem de execução diferente sem redirecionamentos.

    
por 26.03.2018 / 03:01