孩子和与叉子的关系

时间:2013-11-06 04:17:24

标签: operating-system systems-programming

这是我在考试中看到的问题:

解释代码行标记的情况 将到达图3.33中的printf(“LINE J”)。

enter image description here

我想到的唯一答案是:当fork返回0时,我们处于子进程中,因此j会被打印但是我觉得如果有任何其他可能性,请说出你的想法并不那么简单吗? / p>

1 个答案:

答案 0 :(得分:1)

如果fork有效,但execlp没有,那个就会打印该行,并且仅在子流程中。

如果由于某种原因,fork失败(例如,您已超出资源配额),则不会创建子项,父项将只执行if (pid < 0)代码。

如果forkexeclp都工作,execlp 使用/bin/ls可执行文件替换子进程的内容,那么没有代码原点程序存在于此之后。

execlp可能有多种方式失败,其中包括(不是详尽无遗的清单):

  • 权限禁止它。
  • 某个恶作剧者已经移动或删除了/bin/ls可执行文件。
  • 它存在于文件系统(a) else 的其他位置。
  • 它已被破坏。

(a)虽然希望它会在你的路径某处,在这种情况下你最好使用"ls"作为execlp的第一个参数,这样它就可以了找到它。否则,使用execlp并没有什么意义,您也可以使用execl,因为当您使用/开始使用可执行文件名时,您没有使用路径搜索功能。