进程程序替换流程_HT . WANG的博客-程序员宅基地

进程程序替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序

当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。

调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。

替换函数

5个库函数+1个系统调用接口   三个参数:新的程序执行路径   程序运行参数     自己设定的环境变量

 int execl( const char *path, const char *arg, ...);
 int execlp( const char *file, const char *arg, ...);
 int execle( const char *path, const char *arg , ..., char * const envp[]);
 int execv( const char *path, char *const argv[]);
 int execvp( const char *file, char *const argv[]);

int execvpe(const char *file, char *const argv[],char *const envp[]);

execl和execv区别:程序运行参数的不同设置方式

  • execl("/bin/ls","ls","-a","-l",NULL);
  • char* argv[]={"ls","-a","-l",NULL};   execv("/bin/ls",argv);

execl和execlp区别:新的程序是否需要带位置,指定程序所在位置

  • execl("/bin/ls",...)
  • execlp("ls",...)   注意:不给路径针对于在PATH环境变量中添加指定路径    比如 命令可以不添加路径 会默认通过环境变量找到对应的程序  自己写的程序还是需要添加路径

execl和execle区别:当前进程的环境变量是否由自己来设置

  • execl("/bin/ls",...) ;   使用当前默认就有的环境变量
  • char* env[]={"MYVAL=1000",NULL};     execle("/bin/ls",...,NULL,env)

演示代码:

运行结果:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36131611/article/details/115030151

智能推荐

mysql int(1) 与 tinyint(1) 有什么区别?_weixin_30596735的博客-程序员宅基地

http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/25/2153016.htmlmysql int(1) tinyint(1)有什么区别?我指定了字段长度,类型还有意义吗?Reply:mysql 中int(1)和tinyint(1)中的1只是指定显示长度,并不表示存储长度,只有字段指定zerofill是有用如int...

Jrebel激活服务_不死哦的博客-程序员宅基地

(亲测有效!!!)jrebel idea插件激活,亲测可用:在jrebel server处,写上:http://139.199.89.239:1008/88414687-3b91-4286-89ba-2dc813b107ce如果出现激活过期的情况,请重新生成guid,替换原来的guid即可邮箱随便写,即可激活。---------------------作者:cjwcj...

MFC嵌入opencv窗口之读取图像_Lily安的博客-程序员宅基地_opencv窗口嵌入mfc窗口

在初始化函数中加入如下代码在mfc的图形控件嵌入opencv的图形窗口, 以便利用opencv进行画矩形,直线,圆,椭圆。MFC进行鼠标操作时无法显示到图像上,所以嵌入opencv窗口显示图像。void Ctest2Dlg::OnBnClickedReadImg() {cv::namedWindow("view", cv::WINDOW_AUTOSIZE);HWND hWnd = ...

ubuntu安装qt_bubuxindong的博客-程序员宅基地

qt的repo位置:https://launchpad.net/~beineri例如安装qt5.8:https://launchpad.net/~beineri/+archive/ubuntu/opt-qt58-trustysudo add-apt-repository ppa:beineri/opt-qt562-xenialsudo apt-get updatesudo...

Day9 进程同步锁 进程队列 进程池 生产消费模型 进程池 paramike模块..._weixin_34097242的博客-程序员宅基地

进程同步锁:当运行程序的时候,有可能你的程序同时开多个进程,开进程的时候会将多个执行结果打印出来,这样的话打印的信息都是错乱的,怎么保证打印信息是有序的呢?其实也就是相当于让进程独享资源。 1 from multiprocessing import Process,Lock #引用函数 2 import time 3 def work(name,mutex): ...

loss函数汇总_BlackEyes_SY的博客-程序员宅基地

文章目录BCE lossCE lossFocal lossBCE lossb这里指的是binary,二分类交叉熵损失。在使用BCELoss时需要在该层前面加上Sigmoid函数,公式如下:缺点:正类别是训练的时候更加关注的部分,而错分的负类别没有被关注。???https://www.zhihu.com/question/422946096/answer/1541228837CE lossCrossEntropyLoss,交叉熵损失。Focal loss何凯明大佬提出的。优点:它更加关注难样

随便推点

铜板街“行稳致远”的背后逻辑 | 一点财经_yidiancaijing的博客-程序员宅基地

“应该尊重科技,尊重真正的互联网金融公司,这些公司现在都还活着,而且最后会剩下一两百家来服务整个中国市场。”在近日举行的全球金融科技盛会Money20/20中国大会上,何俊如此表示。他和他创立的铜板街是互联网金融行业的科技信徒。这家于2012年创立的互联网金融公司,对自身的定位是一家科技公司,强调以AI等技术赋能,为中产阶层提供在线财富管理服务。当然,何俊在敬畏科技,相信科技能够识...

centos7部署k8s_weixin_34112181的博客-程序员宅基地

1.1 初始配置1.1.1 关闭selinux和firewalld:初始化脚本sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configgrep SELINUX=disabled /etc/selinux/configsetenforce 0getenforcesystemctl stop firewalld...

Linux克隆系统用命令改ip,Linux系统下修改IP地址、网关、DNS的基本方法_LINUX_操作系统_脚本之家..._西部空天的博客-程序员宅基地

临时修改IP地址、网关、主机名、DNS,马上生效,无需重启(重启后失效)1.修改主机名复制代码代码如下:#hostname Slyar2.修改IP地址(eth0为网卡名称)复制代码代码如下:#ifconfig eth0 192.168.1.5 netmask 255.255.255.03.修改默认网关(eth0为网卡名称)复制代码代码如下:#route add default gw 192.168...

使用Nmon_Analyzer excel 问题总结_学无止境201902的博客-程序员宅基地

使用wps打开nmon的分析文件,出现 运行时错误13类型不匹配查看具体代码,是这句出现错误Start = DateValue(Sheet1.Range(“date”)),进一步查看代码中设定的日期格式Sheet1.Range(“Date”).NumberFormat = “dd-mmm-yy”Sheet1.Range(“time”).NumberFormat = “hh:mm:ss”于...

使用备忘___等到天蓝再看海的博客-程序员宅基地

在Idea中使用Gradle30installation failed with message install_failed_test_only生成debug的SHA1码IDEA完美破解在Idea中使用Gradle3.0 在gradle.properties添加 一下代码,重新gradle即可 android.injected.build.model.only.versioned=

推荐文章

热门文章

相关标签