当前位置: 首页> 汽车> 时评 > 南京微信小程序开发制作_如何自己搞个网络商城_优化seo方案_友情链接怎么设置

南京微信小程序开发制作_如何自己搞个网络商城_优化seo方案_友情链接怎么设置

时间:2025/8/17 8:57:04来源:https://blog.csdn.net/weixin_73496371/article/details/147095811 浏览次数: 0次
南京微信小程序开发制作_如何自己搞个网络商城_优化seo方案_友情链接怎么设置

进程程序替换

要讲好这个我为大家准备了五个步骤

1. 先用代码给大家展示一下现象

2.解释原理

3.将代码改成多进程版

4.使用所有的方法,并认识函数参数的含义。

5.其他

我们现在开始第一个

1. 先用代码给大家展示一下现象

关于进程的替换一共有七个函数,我们先不解释先用起来给大家看看现象

代码如下:

 

 现象如下:

对于现象说明: 我们执行的是我们自己写的代码的程序,为什么执行出来的效果和  LS 的效果一样呢?     原因是:excel 这种函数的作用就是,可以执行起来新的程序。

我们知道作用了,接下来为大家解释原理。

2.解释原理

fork 创建子进程后执行的是和父进程相同的程序 ( 但有可能执行不同的代码分支 ), 子进程往往要调用一种 exec 函数 以执行另一个程序。当进程调用一种exec 函数时 , 该进程的用户空间代码和数据完全被新程序替换 , 从新程序的启动 例程开始执行。调用exec 并不创建新进程 , 所以调用 exec 前后该进程的 id 并未改变。
简单来说:我们正常运行程序(执行代码),当程序运行到 execl 的时候,我们的进程(进程=内核数据结构+代码和数据) ,内核数据结构不发生变化,但是有些属性会发生变化,老程序的代码用新的程序替换掉,老程序的数据用新的程序替换掉。
我们看下面的演示:

 我们可以理解为 “夺舍” ,替换完了什么都不会变,唯一的变化就是加载的时候代码数据有大有小。

3.将代码改成多进程版

原理:fork 去创建子进程,让子进程去替换,父进程等待子进程替换。

代码如下: 这里我们替换的还是 ls 

运行如下:

我们的子进程执行 ls ,父进程等待成功。

注意:其实代码本身的意义不大,但是这可以让我们有更深层次的理解(关于子进程)

在以前我们创建子进程让子进程帮我们完成任务,一般来讲完成的都是父进程代码的一部分,

现在子进程有了全新的能力,完整的执行一整个程序。

在这里我们的子进程创建的进程可以直接修改数据(在物理内存里面建立新的代码,重新与子进程的页表建立新的映射关系,当查询的时候,子进程指向的新的代码,与父进程不同。) 

我们尝试替换其他的函数看看会有什么样的结果: 试例  top

这是 top命令

我们使用代码来替换试一下会不会有同样的效果呢?

效果如下:

没有问题,所以当前我们可以替换任何想要替换的程序。

4.使用所有的方法,并认识函数参数的含义。

其实有六种以exec开头的函数,统称exec函数

#include <unistd.h>`
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[])
函数解释
这些函数如果调用成功则加载新的程序从启动代码开始执行 , 不再返回。
如果调用出错则返回 -1
所以 exec 函数只有出错的返回值而没有成功的返回值。
命名理解
这些函数原型看起来很容易混 , 但只要掌握了规律就很好记。
l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : p 自动搜索环境变量 PATH
e(env) : 表示自己维护环境变量
exec 调用举例如下 :
#include <unistd.h>
int main()
{char *const argv[] = {"ps", "-ef", NULL};char *const envp[] = {"PATH=/bin:/usr/bin", "TERM=console", NULL};execl("/bin/ps", "ps", "-ef", NULL);// 带p的,可以使用环境变量PATH,无需写全路径execlp("ps", "ps", "-ef", NULL);// 带e的,需要自己组装环境变量execle("ps", "ps", "-ef", NULL, envp);execv("/bin/ps", argv);// 带p的,可以使用环境变量PATH,无需写全路径execvp("ps", argv);// 带e的,需要自己组装环境变量execve("/bin/ps", argv, envp);exit(0);
}
事实上 , 只有 execve 是真正的系统调用 , 其它五个函数最终都调用 execve, 所以 execve man 手册 第 2 , 其它函数在 man手册第 3 节。这些函数之间的关系如下图所示。
下图 exec 函数族 一个完整的例子:

 

以上就是今天的博客,感谢你的观看,明天持续为大家更新 自主编程shell

感谢你的观看!!!

关键字:南京微信小程序开发制作_如何自己搞个网络商城_优化seo方案_友情链接怎么设置

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: