Operating system 儿童与叉的关系
这是我在考试中看到的问题: 解释代码行标记的情况 将达到图3.33中的printf(“第J行”)Operating system 儿童与叉的关系,operating-system,systems-programming,Operating System,Systems Programming,这是我在考试中看到的问题: 解释代码行标记的情况 将达到图3.33中的printf(“第J行”) 我想到的唯一答案是:当fork返回0时,我们处于子进程,因此j将被打印,但我觉得这并不是那么简单,你能说出你的想法吗?如果fork有效,但execlp无效,则该行将被打印,而且只在子进程中 如果由于某种原因导致fork失败(例如,您已经超过了资源配额),则不会创建任何子级,父级只需执行If(pid
我想到的唯一答案是:当fork返回0时,我们处于子进程,因此j将被打印,但我觉得这并不是那么简单,你能说出你的想法吗?如果
fork
有效,但execlp
无效,则该行将被打印,而且只在子进程中
如果由于某种原因导致fork失败(例如,您已经超过了资源配额),则不会创建任何子级,父级只需执行If(pid<0)
code
如果fork
和execlp
都起作用,execlp
将子进程的内容替换为/bin/ls
可执行文件,因此在该点之后原始程序中不存在任何代码
execlp
有几种可能失败的方法,其中包括(并非详尽的列表):
- 权限禁止它
- 某些恶作剧者移动或删除了
可执行文件/bin/ls
- 它存在于文件系统的其他位置(a)
- 它被破坏了
(a) 尽管希望它会在您的路径中的某个地方,在这种情况下,您最好使用
“ls”
作为execlp
的第一个参数,以便它可以在那里找到它。否则,使用execlp
没有什么意义,您也可以使用execl
,因为当您以/
开始可执行文件名时,您没有使用路径搜索功能。您的意思是,如果execlp工作,那么下一行将不会执行吗?@user2860721,是的,我知道。exec
系列在完成后不会返回到原始程序。有关更多信息,请参阅。