我的问题是:在完成新进程映像的执行之后,功能
主管()
是将执行返回给调用进程还是返回父进程?
发布于 2014-09-01 02:35:07
在使用exec系列函数时,并不期望该函数在所有上返回。程序计数器从取代调用进程的二进制图像的第一指令开始。
在达尔文手册页上:
如果任何exec()函数返回,就会发生错误。返回值为-1,全局变量errno将被设置为指示错误。
有人就以下问题发表评论,但已删除:
如果您处于子进程中,并且execl成功,那么子进程将被新的二进制文件替换。如果失败,控件将返回到该子进程(调用方)。如果你要求的是fork和exec之间没有严格的关系。如果您处于子进程中,而exec失败,则有一个“分叉”子进程,它是原始父进程的副本。此时,您可能希望打印一些错误消息并退出子进程。
如果您想知道失败的原因,可以使用以下模式:
if (execl(...)) {
perror(NULL);
exit(errno);
}例如,尝试运行此程序,错误消息将指示如何修复该程序:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (const int argc, char * const argv[]) {
if (execl("ls", "ls", "-la", NULL)) {
perror(NULL);
exit(errno);
}
return 0;
}解决方案,在本例中使用execlp而不是execl。
https://stackoverflow.com/questions/25598046
复制相似问题