execl返回-Ubuntu
我的问题是:在完成新进程映像的执行之后,函数 execl()execl返回-Ubuntu,c,ubuntu,exec,C,Ubuntu,Exec,我的问题是:在完成新进程映像的执行之后,函数 execl() 是否将执行返回到调用方进程或父进程?使用exec函数系列中的一个时,您根本不希望函数返回。程序计数器从替换调用进程的二进制映像的第一条指令开始 从达尔文手册页: 如果任何exec()函数返回,则将发生错误。 返回值为-1,全局变量errno将设置为 指出错误 有一条评论询问以下内容,但已被删除: 如果您在子进程中,并且execl成功,则子进程将替换为新的二进制文件。如果失败,则控制返回到该子进程(调用者)。如果你是这么问的话,fork
是否将执行返回到调用方进程或父进程?使用
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;
}
#包括
#包括
#包括
#包括
int main(常量int argc,char*const argv[]){
if(execl(“ls”,“ls”,“la”,NULL)){
perror(空);
出口(errno);
}
返回0;
}
在这种情况下,使用
execlp
而不是execl
。两者都不是;不管孩子做了什么,父进程都会继续它的快乐方式(例如,除非父进程决定等待孩子死去)。祖父母从来不知道孙子的事。任何exec*()
函数返回的唯一时间是它失败时。谢谢。我以为execl函数会在任何时候被子函数调用时返回到“父”进程。是的,我删除了它,因为我正在编写一个新的:)谢谢