这是我在考试中看到的问题:
解释在什么情况下会到达图 3.33 中标记为 printf("LINE J") 的代码行。
我想到的唯一答案是:当 fork 返回 0 时,我们处于子进程中,因此 j 将被打印,但我觉得这不是那么简单,如果存在任何其他可能性,您能否说出您的想法?
这是我在考试中看到的问题:
解释在什么情况下会到达图 3.33 中标记为 printf("LINE J") 的代码行。
我想到的唯一答案是:当 fork 返回 0 时,我们处于子进程中,因此 j 将被打印,但我觉得这不是那么简单,如果存在任何其他可能性,您能否说出您的想法?
如果fork
有效但execlp
无效,则将打印该行,并且仅在子进程中。
如果由于某种原因 fork 失败(例如,您超出了资源配额),则不会创建子代,而父代将简单地检查if (pid < 0)
代码。
如果fork
和都execlp
有效,则将子进程的内容execlp
替换/bin/ls
为可执行文件,因此在该点之后原始程序中不存在任何代码。
有几种方法execlp
可能会失败,其中包括(不是详尽的列表):
/bin/ls
可执行文件。(a)虽然希望它会在您的路径中某处,但在这种情况下,您最好将其"ls"
用作第一个参数,execlp
以便它可以在那里找到它。否则,使用没有什么意义execlp
,您也可以直接使用execl
,因为当您以/
.