C语言从当前进程转去执行另一进程

文章介绍了在Linux中,如何使用fork创建子进程以及如何通过execl和execv函数族来替换进程执行内容,使得父子进程执行不同的代码。execl和execlp的区别在于路径查找方式,而execv和execvp的区别在于参数列表的形式。此外,还提到了system函数,它会在执行完给定命令后返回继续执行当前进程。
摘要由CSDN通过智能技术生成

fork创建进程之后,子进程和父进程执行相同的代码,但是在实际开发当中,我们希望父子进程执行不同的代码

execl函数族:

        第一组:

        int execl(const char *path, const char *arg, ...);
       int execlp(const char *file, const char *arg, ...);

                path路径名字,file文件名字在Path中查找,arg参数列表。

        使用注意:

                第二个参数部分,以(char *)0或者NULL结尾,代表这个字符串参数结束。

        例如:

        printf("execl:\n"); 
  7     if(execl("/bin/ls", "l",NULL) < 0){
  8         perror("execl");
  9     }
 11     printf("execlp\n");
 12     if(execlp("ls", "ls",NULL) < 0){
 13         perror("execl");
 14     }

        第二组:       

        int execv(const char *path, char *const argv[]);
       int execvp(const char *file, char *const argv[]);

        argv是参数列表,指针数组形式。

        char *arg[] = {"ls","-a","-l", "./",NULL};
  7     printf("execv:\n"); 
  8     if(execv("/bin/ls", arg) < 0){
  9         perror("execv");
 10     }
 12     printf("execvp\n");
 13     if(execvp("ls", arg) < 0){
 14         perror("execvp");
 15     }

注意:

        当前执行的内容虽然被替换掉了,但是进程号是不变化的。

        如果不被替换,开启一个子进程。       

开启另一个进程的第二种方式:使用system函数

        int system(const char *command);

if(system("./execl")<0){
    perror("system");
}

        与execl函数族不同的是,等待command执行完后,还会回来继续执行当前进程,而不是不再回来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值