首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
系统相关
> 详细
进程控制(十)---exec族函数
时间:
2016-10-01 19:35:25
阅读:
299
评论:
0
收藏:
0
[点我收藏+]
标签:
当使用fork()创建了一个子进程后,通常接着会使用 exec 族函数指定新的程序来覆盖子进程的代码段、数据段、堆和栈。从而让子进程去执行一个新的程序,而不是执行父进程的副本。
=====================================================
exec 族函数中总共有 6 个函数:
上面 5 个函数属于库函数,这些函数都最终调用了下面的 execve 函数,这6个函数中,只有execve 函数属于Linux的系统调用。
出错返回:
这些函数在调用成功时不会返回,只有在调用出错时才返回 -1
====================================================
这几个函数的区别(通过函数名来区分):
带 l 的(list):意思是命令行参数以 单独参数 形式给出
带 v 的(vector):意思是命令行参数以 字符指针数组 的形式给出
带 p 的(path):意思是在 PATH 环境变量中搜索给出的文件名,(当然,如果给出文件的路径名也是可以的,只给出文件名的时候会去PATH变量中去寻找)
不带 p 的:意思是必须给出完整的可执行文件名
带 e 的(environment):意思是给可执行文件传递新的环境变量
不带 e 的:意思是不传递环境变量,使用从父进程复制而来的环境变量
=======================================================
当调用 exec 族函数来让新的程序覆盖原来进程的代码段、数据段和堆栈的时候:
并不会创建新的进程,所以进程的 进程ID 和父进程ID 仍然保持不变,也就说 父子关系 是不会因为调用 exec 族函数而改变的。
子进程中从父进程复制而来的文件描述符默认是不会关闭的,在新程序中仍然是可以使用的。除非调用 fcntl 函数来关闭了close-on-exec标志。
打开的目录流是会关闭的,这是由于opendir函数实现的,opendir函数会打开close-on-exec标志。
实际用户 ID 是不变的,有效用户ID是根据新的可执行文件来决定的,如果新的可执行文件设置了set-user-id位,那么有效用户ID将被设置成文件的用户ID,否则有效用户ID就维持原来子进程的有效用户ID不变。
进程控制(十)---exec族函数
标签:
原文地址:http://www.cnblogs.com/frank-yxs/p/5926045.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
gitlab 在linux安装环境下存储地址
2021-07-29
当 Mac 未检测到外部显示器时如何修复它
2021-07-29
Ubuntu18.04安装qemu遇到问题-qemu : Depends: qemu-system (>= 1:2.11+dfsg-1ubuntu7)
2021-07-28
[Linux]Shell编程【待续】
2021-07-28
Linux系统资源查看
2021-07-27
Archlinux爬坑指南
2021-07-27
[Linux]Linux发展历程
2021-07-27
非桌面系统 (ubuntu)安装google-chrome
2021-07-27
在Ubuntu18.04系统中源码安装 gcc7.3.0
2021-07-23
Linux快捷键杂记
2021-07-22
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!