Linux系统编程之程序的执行(exec函数族)

Linux系统编程之程序的执行(exec函数族),第1张

程序文件存储在磁盘上,当系统需要执行程序时将其加载至内存中形成进程。我们程序员可以通过一些调用,使进程能以全新的程序来替换当前运行的程序。

Linux环境下使用exec()函数执行一个新的程序,该函数在文件系统中搜索指定路径的文件,并将该文件内容复制到调用exec()函数的地址空间,取代原进程的内容。

exec()函数原型,如下(其实有很多,其实大部分使用方式都是大同小异的...)

参数其实很简单,一个要pathname也就是要执行的程序的环境变量后面是这个程序的参数(系统自带的可执行程序如,ls,cp,cat 等),另一个是要filename也就是要执行的程序的文件名后面是这个程序的参数。

execlp():

execl()

int execl(const char *path, const char *arg, ...)

是系统提供的接口函数

execl是exec函数族中的一员

exec族函数的功能是加载一个新的程序替换掉当前的进程

它可以调用一个外部程序到当前的进程空间里

但不会产生一个新的进程(它只是将当前进程的映像替换成新加载的程序的映像)

可以写一个程序清楚地看到

d.c

#include <stdio.h>

#include <unistd.h>

int main(int argc,char **argv)

{

    printf("pid=%d ppid=%d\n",getpid(),getppid())

    return 0

}

f.c

#include <stdio.h>

#include <unistd.h>

int main(int argc,char **argv)

{

    printf("pid=%d ppid=%d\n",getpid(),getppid())

    execl("./d","d",NULL)

    return 0

}

在未执行execl调用之前和执行execl之后pid和ppid完全相同

由此可见execl并没有创建新的进程


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7198770.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-02
下一篇2023-04-02

发表评论

登录后才能评论

评论列表(0条)

    保存