Linux——进程替换

进程替换

Linux中新进程的产生并没有使用create创建进程的方法,而是fork——>exec,两步完成一个新进程的创建。
先fork一份子进程,再将该子进程替换成你想要执行的程序即可。

下面的5个库函数都是通过上面的系统调用实现的。
Linux——进程替换_第1张图片

各个参数的含义如下:
在这里插入图片描述
我们知道Linux中的bash进程实际上是命令解释器
在这里插入图片描述
由上图可以看出,ps的父进程的的pid是3011,也就是bash。
由此,我们也可以呼应开文所说的逻辑:

  • bash将自己fork之后,产生一个子进程,也为bash
  • 然后对这个子进程执行exec替换成我们想要执行的命令。
    替换为ps,ps就执行完成。

命令解释器bash就是不断的复制自己,再将自身的子进程替换成想要执行的程序。

exec系列如下:Linux——进程替换_第2张图片

第一个参数是:用谁来替换,第二个参数…参数个数不固定,如何确定参数的个数?要求最后一个参数是空指针。

接下来我们运行下面的一个程序,将当前程序替换成ps,其中ps的存储位置为/bin/ps中(使用的查看命令是which ps
execl执行成功无返回值,并且会从新程序的主函数开始执行,只有执行失败时才会返回错误码。

Linux——进程替换_第3张图片
其中ps作为第一个参数,-f作为第二个参数;
我们约定:传入的第一个参数是当前进程的名字。

执行结果如下:

bash自复制,产生子进程pid = 4497,main进行替换并产生一个子进程pid = 4788,然后子进程将群其替换为ps
Linux——进程替换_第4张图片

下面我们不进行fork,直接对当前程序进行替换,代码如下:
Linux——进程替换_第5张图片

执行结果如下:
Linux——进程替换_第6张图片
其他库函数的使用如下:
Linux——进程替换_第7张图片

你可能感兴趣的:(Linux,linux,bash,运维)