Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 儿童与叉的关系_Operating System_Systems Programming - Fatal编程技术网

Operating system 儿童与叉的关系

Operating system 儿童与叉的关系,operating-system,systems-programming,Operating System,Systems Programming,这是我在考试中看到的问题: 解释代码行标记的情况 将达到图3.33中的printf(“第J行”) 我想到的唯一答案是:当fork返回0时,我们处于子进程,因此j将被打印,但我觉得这并不是那么简单,你能说出你的想法吗?如果fork有效,但execlp无效,则该行将被打印,而且只在子进程中 如果由于某种原因导致fork失败(例如,您已经超过了资源配额),则不会创建任何子级,父级只需执行If(pid

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

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


我想到的唯一答案是:当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
系列在完成后不会返回到原始程序。有关更多信息,请参阅。