我不是在谈论线程安全,而是通过进程安全我的意思是,对于每个进程,默认情况下OS在启动一个新进程时打开三个文件描述符,即stdin,stdout和stderr,但是我们知道UNIX中的所有内容是文件,所以我假设这些是与不同进程共享的实际物理文件。
我的问题(基于假设这些是与所有进程共享的不同文件,当然如果我们有文件描述符,那么我们有文件)是:
答案 0 :(得分:12)
...因为我们知道UNIX中的所有内容都是文件......
这是一种过度概括。
我假设cout和cerr是与不同进程共享的物理文件。
您的假设不正确。他们不是"身体"文件;它们没有文件名,也没有存储在磁盘上。
cout
和cerr
(通常称为stdout和stderr)是文件描述符。它们可以引用文件,但更常见的是引用终端或管道。每个进程都有自己的文件描述符集; stdin / stdout / stderr只是每个进程用于输入和输出的标准三个文件描述符集的名称。
为什么多个进程同时使用输出到cout / cerr之间没有隔行扫描?
另一个不正确的假设。写入相同文件描述符的多个进程可能导致交错输出。但是,写入不同文件描述符的多个进程不会相互干扰。
答案 1 :(得分:2)
要回答您的主要问题,简短的回答将是否。
请考虑以下流程:
A is running
A is running
A is running
A is running
A forks a new process B
流程B的PDT
中的所有条目都将指向A指向的流程,包括stderr
,stdout
和stdin
。
如果在流程A中打印1000次+
,则在流程B中打印1000次-
。
然后你可以期望你的输出混合如下:
++++++++---------+++++----------+++++------
这是因为他们共享相同的stdout
。