0

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

解释在什么情况下会到达图 3.33 中标记为 printf("LINE J") 的代码行。

在此处输入图像描述

我想到的唯一答案是:当 fork 返回 0 时,我们处于子进程中,因此 j 将被打印,但我觉得这不是那么简单,如果存在任何其他可能性,您能否说出您的想法?

4

1 回答 1

1

如果fork有效但execlp无效,则将打印该行,并且仅在子进程中

如果由于某种原因 fork 失败(例如,您超出了资源配额),则不会创建子代,而父代将简单地检查if (pid < 0)代码。

如果fork和都execlp有效,则将子进程的内容execlp 替换/bin/ls为可执行文件,因此在该点之后原始程序中不存在任何代码。

有几种方法execlp可能会失败,其中包括(不是详尽的列表):

  • 权限禁止它。
  • 一些恶作剧者已经移动或删除了/bin/ls可执行文件。
  • 它存在于文件系统(a)的其他地方
  • 它已损坏。

(a)虽然希望它会在您的路径中某处,但在这种情况下,您最好将其"ls"用作第一个参数,execlp以便它可以在那里找到它。否则,使用没有什么意义execlp,您也可以直接使用execl,因为当您以/.

于 2013-11-06T04:21:39.987 回答