Printf仅在双线程序中打印一次后打印

时间:2016-10-12 22:23:04

标签: c printf fork

我有一个两行程序来打印fork之后的进程的id。我希望父进程可以使用66015,子进程可以使用0

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
  pid_t id = fork();
  printf("id: %i\n", id);
}

但是程序只打印

id: 66015

并且不包括该行

id: 0

有人可以解释发生了什么吗?我对Cfork相对较新。

我在OSX 10.11上,gcc --version打印

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.0.0 (clang-800.0.38)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

1 个答案:

答案 0 :(得分:2)

您的程序确实应该以任何给定的顺序输出两行。在终端中运行它会做到这一点。在一些奇怪的环境中运行它,例如emacs&#39; eshell窗口可能会产生令人惊讶的副作用,例如您所经历的。