进程替换exec

为什么要替换进程呢

在Linux中,进程的产生都是由一个进程fork()一个子进程,加exec将子进程替换成我们需要的进程,来产生新的进程
在这里插入图片描述
在Linux系统中有一个bash,我们执行三次ps -f来观察一下
在这里插入图片描述
我们发现,三次ps -f属于三个不同的进程(有不同的pid),但是他们都有相同的父进程就是bash,也就是说我们的ps进程产生就是,通过bash进程fork复制一个子进程,再通过子进程替换成我们需要的进程做到的

查看帮助手册查看你exec系列方法

我们写这样一段代码

#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/types.h>
#include<sys/wait.h>

int main()
{
	printf("main pid=%d ppid=%d\n",getpid(),getppid());
	pid_t pid = fork();
	assert(pid != -1);

	if(pid == 0)
	{
		printf("child pid=%d ppid=%d\n",getpid(),getppid());
		execl("/bin/ps","ps","-f",(char*)0);
		//第二个参数是名称,传入其他的字符也可以
		//第一个参数 路径 第二个参数 名称 第三个参数 替换程序参数  第四个参数 没有参数了传入空指针
		printf("error");
		exit(0);
	}
	wait(NULL);
	exit(0);
}

执行得到
在这里插入图片描述
通过exec系列方法可以实现我们的mybash项目
链接: 在Linux系统c语言实现个人命令解释器(mybash).

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值