考虑以下:
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。