从上面可以看出,after那句话是没有打印的,说明代码是直接替换掉的。(其实吧,我自己理解觉得即使没有完全替换掉,本身执行ls -a -l 这个进程时也是有返回值的,直接返回了,也没有后面什么事情了,也许是我学的还是有点浅显吧。)
下面就是简单的一个原理
再看一下下面的代码和现象:
从中我们可以看出子进程在替换前后的pid都是没有发生改变的。
说明程序替换中不创建新的进程,只进行进程的程序代码和数据的替换工作。
1.程序替换成功之后,exec*后续代码不会被执行,替换失败之后才能执行后续代码,所以只有失败的返回值,没有成功的返回值!!
2.我们的CPU如何得知程序的入口地址?
Linux中形成的可执行程序,是有格式的,ELF,可执行程序的表头,可执行程序的入口地址就是在表头中。
补充一个知识:C++的文件后缀可以是.cpp,.cc,.cxx.下面我还是以.cpp为主
C++:
shell脚本:.sh文件
无论是我们的可执行程序,还是脚本其他语言,为什么能跨语言调用呢?
其实所有语言运行起来,本质都是进程!
(1)可以在外面搞:
(2)使用putenv函数:
(3)使用execle,execve
1.环境变量是什么时候给进程的?
环境变量也是数据,创建子进程的时候,环境变量就已经被子进程继承下去了,extern char** environ.并且程序替换中,环境变量信息不会被替换。