谁在fork()之后首先执行:父或子?

Bru*_*uce 21 c unix fork

我知道它可以是其中之一.但我总是看到孩子在我的UNIX终端上首先执行.此外,为什么父和子并行执行.他们似乎在连续执行.这是因为他们共用同一个终端吗?

NPE*_*NPE 23

一般而言,关于其执行的相对顺序,没有任何说法.

现在,让我们考虑一下您的具体问题.如果:

  1. 这两个过程都需要花费大量的时间来运行,并且
  2. 你说的是在对方取得任何进展之前完成一个完成,并且
  3. 有未使用的CPU周期,和
  4. 每次运行应用程序时都会发生这种情况.

很可能这表明在两个进程之间存在一些(可能是无意的)同步.

  • @aix:两者都取得了进展。我在父母和孩子身上都做了一个简单的 printf 。我从来没有看到他们的 printfs 交错。它总是子 printf(约 100 个聚集在一起)......父 printfs(聚集在一起)......子 printfs.. (2认同)

Mil*_*lan 6

实际上这是预期的行为,即使它当前没有正常运行,这意味着父项可以在子项之前运行,而子项可以在父项之前运行.

目标是首先运行子进程.

简而言之,它背后的逻辑是,如果孩子先被运行,如果孩子正在调用,则写入时写入(COW)的开销被消除,exec因为父母没有任何机会写入地址空间.