Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/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
Unix 如果您从子进程中获取fork()和exec(),并在父进程中等待,那么父进程如何从子进程中获取返回代码?_Unix_Process_Fork_Exec_Wait - Fatal编程技术网

Unix 如果您从子进程中获取fork()和exec(),并在父进程中等待,那么父进程如何从子进程中获取返回代码?

Unix 如果您从子进程中获取fork()和exec(),并在父进程中等待,那么父进程如何从子进程中获取返回代码?,unix,process,fork,exec,wait,Unix,Process,Fork,Exec,Wait,我正在学习fork(),exec(),等等。我在一本教科书中遇到了一些我不完全理解的东西 在本例中,一个进程调用fork() 在子进程中,我们调用exec() 稍后,在父级中,我们调用wait() 我的理解是,成功的exec()调用永远不会返回。如果我们在子对象中调用了exec(),如果子对象永远不会从exec()返回控制权,我们怎么能等待子对象在父对象中返回呢 我唯一的猜测是,发生的情况是,家长认为自己在等待孩子,实际上是在等待用exec创建的新进程?也就是说,通常我会fork()等待孩子。如

我正在学习
fork()
exec()
,等等。我在一本教科书中遇到了一些我不完全理解的东西

在本例中,一个进程调用
fork()

在子进程中,我们调用
exec()

稍后,在父级中,我们调用
wait()

我的理解是,成功的
exec()
调用永远不会返回。如果我们在子对象中调用了
exec()
,如果子对象永远不会从
exec()
返回控制权,我们怎么能等待子对象在父对象中返回呢

我唯一的猜测是,发生的情况是,家长认为自己在等待孩子,实际上是在等待用exec创建的新进程?也就是说,通常我会
fork()
等待孩子。如果我
fork()


谢谢

您需要区分流程和程序。调用
exec
在同一进程中运行不同的程序。
exec
函数不会返回(发出错误信号除外),因为它会终止调用的程序。但是,该进程被重用以运行不同的程序。在某种程度上,从运行
exec
的进程的角度来看,
exec
函数作为新程序的入口点返回

从父进程的角度来看,有一个子进程。这就是父母所知道的一切。父级不知道子级调用了
exec
,除非它观察并通过运行
ps
等间接方式发现。父进程只是在等待子进程退出,而不管子进程正在运行什么程序