Linux-进程2

1、课程目标

  • exec(熟练)
  • system(熟练)
  • 小结

2、进程-exec函数族

  • exec是一个函数族,包括6个函数。
    exec族作用

  • 进程可以调用exec函数族执行某个程序

  • 进程当前内容被指定的程序替换

  • 实现让父子进程执行不同的程序(父进程创建子进程子进程,调用exec函数族,父进程不受影响继续执行当前程序)

  • 其中在终端中就使用了exec,shell创建子进程执行某个程序,进行运行。

3、进程-execl/execlp

#include<unistd.h>
int execl(const char *path,const char *arg,...);
int execlp(const char *file,const char *arg,...);
  • execl和execlp函数:执行一个指定的程序。
  • execl参数1执行程序的名称(包含路径),可以是绝对路径或者相对路径。
  • execlp参数1执行程序的名称(不包含路径),程序会从PATH环境变量路径中查找
  • execl和execlp参数2和后面可变参数是传入参数1程序的参数,其中参数2为参数1的程序名称,最后一个参数必须是空指针NULL。
  • int返回值:执行其他程序成功了则函数的返回值等都没有了,被调用的程序替换了,若失败了返回EOF(-1),需要对函数返回值进异常处理。

4、进程-execl/execlp-示例

/* 利用execl调用ls命令,查看/etc目录下文件详细信息 */
if(execl("/bin/ls","ls","-a","-l","/etc",NULL) < 0)
{
    perror("execl");
}
/* 利用execlp调用ls命令,查看/etc目录下文件详细信息 */
if(execlp("ls","ls","-a","-l","/etc",NULL) < 0)
{
    perror("execlp");
}

5、进程-execv/execvp

#include<unistd.h>
int execv(const char *path, char *const argv[]);
int execvp(const char *file,char *const argv[]);
  • execv/execvp和execl/execlp相比参数变少了,将后面的多个参数以数组参数形式传入。
  • 函数执行成功执行指定的程序,失败的时候返回EOF
  • arg…封装成指针数组的形式

6、进程-execv/execvp-示例

/* 利用execv/调用ls命令,查看/etc目录下文件详细信息 */
char *arg[] = {"ls","-a","-l","/etc",NULL}
if(execv("/bin/ls",arg) < 0)
{
    perror("execv");
}

/* 利用execvp/调用ls命令,查看/etc目录下文件详细信息 */
char *arg[] = {"ls","-a","-l","/etc",NULL}
if(execvp("ls",arg) < 0)
{
    perror("execvp");
}

7、进程-system

#include<stdlib.h>
int system(const char *command);
  • system函数的入口参数,为字符的命令
  • 执行某个命令成功,返回命令的返回值;失败返回EOF
  • 当前进程使用system时等待command命令执行结束后才会继续执行。
  • system使用方式不用像execv/execvp/execl/execlp函数创建子进程。然后子进程执行命令程序。

8、进程小结

  • execl/execlp的使用
  • execv/execvp的使用
  • system的使用
  • 以上函数的区别。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值