提取$!来自多个流程替代

提取$!来自多个流程替代

考虑以下:

exec > >(tee -a mylog) 2> >(tee -a mylog >&2)
pspid=$!

哪个tee进程有上面的pid $!

如果我们想要上面每个进程的 pid,tee我们如何提取它们?

答案1

$!包含异步运行的最后一个管道中最右边命令的 pid。在这里,您只需要运行exec两次:

exec > >(tee -a mylog)
out_pid=$!
exec 2> >(tee -a mylog >&2)
err_pid=$!

但也许你不需要记录这些 pid。tee当您的脚本(及其启动的所有进程以及 shell 的 stdout/stderr)退出时,这些进程将退出(在看到 eof 时)。如果你在它们之前杀死它们,那么如果它们尝试在 stdout/stderr 上写入任何内容,你的脚本(或将其 stdout/stderr 重定向到这些管道的任何进程)将收到 SIGPIPE。

相关内容