我有一个两行程序来打印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
有人可以解释发生了什么吗?我对C
和fork
相对较新。
我在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
答案 0 :(得分:2)
您的程序确实应该以任何给定的顺序输出两行。在终端中运行它会做到这一点。在一些奇怪的环境中运行它,例如emacs&#39; eshell窗口可能会产生令人惊讶的副作用,例如您所经历的。