Linux内核分析课程7_execve()函数对应的系统调用处理过程

本文详细分析了Linux内核中execve()函数的执行过程,从函数族介绍到do_execve()的具体实现,探讨了系统调用在加载可执行程序时如何设置参数、环境变量,以及涉及的do_execve_common()和load_elf_binary()等关键步骤,帮助理解Linux进程执行的本质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Linux内核课第七周作业。本文在云课堂中实验楼完成。
  唐国泽 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000


  昔者庄周梦为蝴蝶,栩栩然蝴蝶也,自喻适志与,不知周也。俄然觉,则蘧蘧然周也。不知周之梦为蝴蝶与,蝴蝶之梦为周与?周与蝴蝶,则必有分矣。此之谓物化。(《庄子·齐物论》)
  在我们的操作系统中,也有如此浪漫情怀的庄生梦蝶—–exec()函数族.
  庄周(调用execve的可执行程序)入睡(调用execve陷入内核),醒来(系统调用execve返回用户态)发现自己是蝴蝶(被execve加载的可执行程序)

一.exec函数族

(一)介绍

  fork()函数, 相当于是创建了一个新的进程, 但该子进程复制的确实父进程的内容, 如果让其执行下去,那么也是执行和父进程相同的内容呢, 但实际中,我们执行的是新的任务, 那么在这里是如何实现的呢?
  exec函数族就实现了在一个进程中启动另外一个程序的方法. 它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件。
  那什么时候使用exec函数呢? 除了我们上面提到的fork()之后调用exec()函数来执行一个新进程外,还有当进程认为自己继续执行下去也没有什么实际的工作的时候,就可以调用exec函数来庄周梦蝶,化成蝶了.

(二)函数族具体实现

  在linux下,有六个exec开头的函数, 来实现:
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值