为什么要替换进程呢
在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).