Answers:
管道仅绑定到不同于0(stdin)的不同文件描述符:
$ echo <(true)
/dev/fd/63
$ echo <(true) <(true)
/dev/fd/63 /dev/fd/62
一个进程当然一次可以有多个打开的文件描述符,所以没有问题。
pipe()系统调用创建的管道。
pipe(),然后派生子进程。如果使用匿名管道,则主进程的确会打开其他文件描述符。这些额外的文件描述符以形式传递/dev/fd/...,该过程通常会简单地使用这些文件名打开它们。这将导致它们被dup()ed,从而创建更多的打开文件描述符。该过程还可以立即使用命名的文件描述符,而无需任何打开的调用……
a,我将其称为./a <(ls),并成功打印了文件列表,证明已命名的文件decriptor(在我的情况下为63)已经打开。bash可能在与Linux不同的体系结构上的临时目录中使用命名管道,在这种情况下,进入主进程时不会打开其他文件描述符。
bash手册页。