首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在使用execvp时区分执行案例?

在使用execvp函数时,可以通过传递不同的参数来区分执行的案例。execvp函数是一个系统调用,用于在当前进程中执行一个新的程序。它接受两个参数,第一个参数是要执行的程序的路径,第二个参数是一个字符串数组,用于传递给新程序的命令行参数。

要区分执行的案例,可以根据传递给execvp函数的参数来确定执行的程序。可以通过在命令行参数中传递不同的标识符或参数值来实现。新程序可以根据这些参数值来执行不同的逻辑或功能。

以下是一个示例代码,演示如何在使用execvp时区分执行案例:

代码语言:txt
复制
#include <unistd.h>
#include <stdio.h>

int main() {
    pid_t pid = fork();
    
    if (pid == 0) {
        // Child process
        char *args[] = {"./program", "case1", NULL};
        execvp(args[0], args);
    } else if (pid > 0) {
        // Parent process
        char *args[] = {"./program", "case2", NULL};
        execvp(args[0], args);
    } else {
        // Fork failed
        perror("fork");
        return 1;
    }
    
    return 0;
}

在上面的示例中,通过fork函数创建了一个子进程。在子进程中,通过传递参数"case1"来执行一个名为"program"的程序。在父进程中,通过传递参数"case2"来执行同一个程序。程序"program"可以根据传递的参数值来执行不同的逻辑。

请注意,这只是一个示例,实际应用中可以根据具体需求来设计参数的传递方式和处理逻辑。

对于云计算领域,腾讯云提供了丰富的产品和服务,包括计算、存储、数据库、网络、人工智能等方面。具体推荐的产品和产品介绍链接地址可以根据具体的应用场景和需求来确定。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux进程控制【进程程序替换】

就像汽车拥有各种各样的轮胎,越野需要换上路面兼容性更好、更耐造的越野胎;日常家用时,舒适性更好、胎噪更小的轮胎显然就更合适了,针对不同的使用场景替换不同的轮胎,程序替换也是这么个意思,执行特定任务...shell 外壳中的 bash 就是一个任务处理平台,当我们发出指令, ls、pwd、touch 等指令后,bash 会创建子进程,将其替换为对应的指令程序并执行任务,就能实现各种指令 进程程序替换图解.../usr/bin/ls 参数2:待替换程序的名称, ls 参数3~N:待替换程序的选项, -a -l等,最后一个参数为 NULL,表示选项传递结束 ......等函数,无论什么语言的文件流操作函数都需要调用它们 ---- 2.7、函数7 execvpe 对 execvp 的再一层封装,使用方法与 execvp 一致,不过最后一个参数可以传递环境变量表 #...,子进程和父进程共享一份只读区域的数据,但因为发生了程序替换,触发 写拷贝 机制,令子进程读取另一块区域的数据 写拷贝 在只读数据区也能触发,因为不能影响到父进程 ---- 总结 以上就是本篇关于

23720

exec族

fork子进程是为了执行新程序(fork创建了子进程后,子进程和父进程同时被OS调度执行,因此子进程可以单独的执行一个程序,这个程序宏观上将会和父进程程序同时进行) 可以直接在子进程的if中写入新程序打代码...但这样不够灵活,因为我们只能把子进程程序的源代码贴过来执行(必须知道源代码,而且源代码太长了也不好控制) 使用exec族函数运行新的可执行程序。...exec族函数可以直接把一个编译好的可执行程序直接加载运行。 有了exec族函数后,典型打父子进程程序是这样的:子进程需要运行的程序被单独编写、单独编译链接成一个可执行程序(hello)。...v 希望接收到一个以NULL结尾的字符串数组的指针 p 是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件 e 函数传递指定参数envp,允许改变子进程的环境,无后缀e,...------------\n"); if( execvp( "ls", arg ) < 0 ) { perror( "execvp error " ); exit

1.1K10
  • UNIX高级环境编程 第三次实验 实现带参数的简单Shell

    当fork()函数返回值为0表示处 于子进程中;而返回值大于0表示处于父进程中,此时的返回值是子进程的进程id。因此,fork()的返回值可以用来划分仅仅适合父进程 和子进程执行的程序段。...注意,argv的第一个元素必须是要执行的程序(命令)的路径名。 envp:环境变量表,供要执行的命令使用。实参数用NULL或系统环境变量environ均可。...一般命令都可以由fork+execvp执行,由fork创建一个子进程,调用一种exec函数,该进程执行的程序完全替换为新程序 而新程序则从其main函数开始执行; 但要注意exec并不创建新进程,所以前后的进程...因此,我们可以使用execvp函数,仅需传入之前构造的argv参数,从而间接执行系统调用execve: if ((pid=fork())<0)printf("fork error: %s\n", strerror...填入可执行文件参数,子进程开始执行,若出错才会执行下面的execvp error打印错误语句,waitpid等 待特定fork后子进程号结束,若出错则同样做出错打印信息处理 2.6 cd命令 对于一个自制

    93020

    Linux系统下进程编程之exec族函数解析(四)

    2、在Linux中使用exec函数族主要有以下两种情况: a、当进程认为自己不能再为系统和用户做出任何贡献,就可以调用任何exec 函数族让自己重生。...char *file, char *const argv[]); execlp和execvp 这两个函数在上面2个基础上加了p,较上面2个来说,区别是:上面2个执行程序时必须指定可执行程序的...Shell进程堆栈中存放着该用户下的所有环境变量,使用execl、execv、execlp、execvp函数使执行码重生,Shell进程会将所有环境变量复制给生成的新进程;而使用execle、execve...这两个函数会在下面进行讲解的): 现在使用excel来演示可执行程序----ls -la,最后它在环境变量目录下找到了ls ,在当前用户目录找不到: #include ...函数用法一样,这里我就不举例子了,可以按照execv用法模仿使用

    1.3K30

    进程控制第二弹(进程程序替换)

    \n"); 没有执行。 基本原理 当进程调用一种exec函数,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。...只不过是拿老程序的壳子执行新程序的代码。 站在被替换进程的角度:本质上是这个程序被加载到内存。使用exec系列函数加载,exec系列函数类似一种Linux上的加载函数。...\n"); 没有执行的原因是,调用execl函数后,去执行ls程序了,原来的代码和数据被替换了。 exec系列函数执行完毕后,后续的代码不见了,因为被替换了,因此没有机会去执行了。...将ls加载到物理内存,需要在数据层面上做写拷贝,然后把ls数据加载进去,修改子进程的映射关系,保证子进程和父进程在数据层面上是独立的。但是ls不仅仅只有数据,还有代码,因此代码也需要发生写拷贝。...使用所有的替换方法,并且认识函数的参数含义 execl int execl(const char *path, const char *arg, ...); execl中,l:list,列表 path:

    7710

    Linux模拟实现【简易版bash】

    ,这里使用 execvp execvp(); //具体细节先忽略 exit(168); //替换失败后返回,这个值可以自定义 [0, 255] } //父进程等待子进程终止...程序替换,需要使用 argv 表,这张表由 指令、选项、NULL 构成 利用指令间的空格进行分割 如何分割指令?...将分割好的指令段,依次存入 argv 表中,供后续程序替换使用 argv 表实际为一个指针数组,可以存储字符串 command 一样,表 argv 也需要考虑大小,这里设置为 64,实际使用时也就分割为四五个指令段...//子进程进行程序替换 pid_t id = fork(); if(id == 0) { //直接执行程序替换,这里使用 execvp execvp(argv[0], argv); exit...,这里使用 execvp execvp(argv[0], argv); exit(168); //替换失败后返回 } //父进程等待子进程终止 int

    26620

    操作系统·进程

    什么是进程 一段程序的执行过程。 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位(注意和线程区分),是操作系统结构的基础。...进程因发生某种事件(I/O请求、申请缓冲空间等)而暂停执行时的状态,亦即进程的执行受到阻塞,故称这种状态为阻塞状态,有时也称为“等待”状态或“睡眠”状态。...由创建者提供,通常由字母、数字所组成,往往是由用户(进程)在访问该进程使用。 ②内部标识符。这是为了方便系统使用而设置的。...进程调度程序的主要功能: -选择进程占有CPU -进行进程上下文的切换 非剥夺方式 分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件(提出I/O请求)而阻塞才把处理机分配给另一进程...exec族 fork子进程是为了执行新程序(fork创建了子进程后,子进程和父进程同时被OS调度执行,因此子进程可以单独的执行一个程序,这个程序宏观上将会和父进程程序同时进行) 使用exec族函数运行新的可执行程序

    90520

    【Linux】进程的程序替换

    /bin/ls 命令 实际上是一个可执行程序,所以ls程序是在磁盘上的 ---- 前面执行的是自己代码的一部分,当调用execl,将磁盘中可执行程序替换当前进程的代码和数据 后半部分就不执行自己的代码了...程序替换的基本原理 当前的进程执行当前代码,如果执行了函数execl等接口,就会根据你所传入的程序的路径以及你要执行的名称及选项,把磁盘当中的一个其他的程序加载到对应的内存, 用新程序的代码替换当前进程的代码段...NULL结尾 ---- 具体的实现以及返回值问题上面在演示程序替换已经使用过啦 2. execv int execv(const char *path, char *const argv[]); v代表...,依旧可以执行ls指令 ---- 4. execvp int execvp(const char *file, char *const argv[]); 带p:代表当执行程序的时候,只需要指定程序名即可...(需要带路径) envp[]:代表自定义环境变量 如果调用程序替换,若不想让子进程使用父进程的环境列表,想自定义环境变量,就可以自己传一个环境变量 ---- 在另一个目录中创建other.cc (

    2K30

    C++中的exec()函数

    exec()函数有多个版本,例如execl、execv、execle、execve等,根据不同的参数类型和个数来使用。...前言 fork 函数之后,如果想要把子进程换成一个我想要执行的进程,这时,就不得不使用 exec()函数了,这也是 fork()的意义所在。...path, char *const argv[], char *const envp[]) int execlp(const char *file, const char *arg, ...) int execvp...在这里参数传递方式是以函数名的第5位字母来区分的,字母为“l”(list)的表示逐个列举的方式,字母为“v”(vertor)的表示将所有参数整体构造成指针数组传递,然后将该数组的首地址当做参数传给它,数组中的最后一个指针要求是...读者可以观察execl、execle、execlp的语法与execv、execve、execvp的区别。 ③ 环境变量:exec函数族使用了系统默认的环境变量,也可以传入指定的环境变量。

    29720

    【Linux】万字解读<进程控制>:创建&中止&等待&替换

    我们需要知道父进程派给子进程的 任务完成的如何 ,:子进程运行完成,结果对还是不对,或者是否正常退出。...,要维持进程的独立性——写拷贝解决;我们有结论: 程序替换也存在写拷贝 【2】进程替换的机制&情景演示 机制: 进程替换成功: 子进程执行新的程序了, 剩下的代码不会执行了,被覆盖了。...只有失败才有返回值 演示: 当程序替换成功,打印语句begin和执行替换后的语句,不打印语句end 当程序替换失败,打印语句begin和语句end //注:我们只要知道下面execl函数是 起到进程替换的作用就行...【3】exec类函数使用演示 exec用于程序替换,使用要满足:(1)必须找到可执行程序(2)必须要告诉exec*,怎么执行 ,下面会有具体演示 1. execl #include ..."/bin/ps", argv); // 带p的,可以使用环境变量PATH,无需写全路径 execvp("ps", argv); exit(0); } 【4】exec类函数原理 事实上, 只有

    8710

    linux 进程管理相关函数

    对于linux 函数可以通过命令行指令: man 函数名,查看函数相关信息 //返回当前进程的pid getpid(); //创建一个进程, //当执行完这行代码后, //将会有两个进制执行下面的代码...); //和fork()类似 //但是这里子进程先运行, //结束后,运行父进程 vfork() //exec将一个新程序载入到*当前的进程中, //调用的进程将被覆盖, //即代表execl()执行后...,下面的代码就不执行了 //exec这里只是代表这一系列执行的函数,不同文件有不同的执行函数 //:execl,execv,execle.execve.execlp,execvp ,参数几乎没差别 /...,等待一个子进程终止后, //父进程执行wait后的代码 wait(); //使用在调度进程关心某个进程的结束情况 //参数1 所等待的进程或进程组pid //参数2 进程返回的状态 //参数3 WNOHANG...pid_t pid,int *status,int options); //挂起进程指定时间 //单位是秒 sleep(unsigned int seconds); //exit()退出, //清楚进程使用的内存空间

    65710

    【Linux】详解进程程序替换

    一、替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。...当进程调用一种exec函数,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。...替换系统命令命令行怎么写,参数就怎么传,参数以NULL结尾。程序替换一旦成功,exec*后序的代码不再执行。因为原程序的数据和代码被替换掉了。exec*程序替换接口只有失败返回值,没有成功返回值。...二、子进程进行程序替换 通过子进程进行程序替换可以让子进程帮我们去做一部分工作,而且子进程发生程序替换不会影响父进程执行,因为替换时代码和数据会发生写拷贝。...如果我们想传递全新的环境变量表给子进程,就要使用带e的程序替换接口。

    7610

    【Linux】开始学习进程替换吧!

    2.2 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支) 子进程往往要调用一种exec函数以执行另一个程序。...当进程调用一种exec函数,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 开始执行。 调用exec并不创建新进程,所以调用exec前后该进程的id并未改变 没有创建新进程!!!...来看效果: 让子进程完成父进程代码的一部分 让子进程执行一个全新的程序(会发生写拷贝,建立全新的物理内存空间) 2.4 理解使用exec* 函数 这些函数原型看起来很容易混,但只要掌握了规律就很好记...int execvp(const char *file, char *const argv[]) 带p含义是可以不传入文件路径,可以直接告诉exec*需要执行谁就可以了 本质就是:查找这个程序,系统会在系统环境变量.../myprocess",argv , environ); 注意 根据上面的用法使用,我们可以总结一下: 函数名 参数格式 是否带路径 是否使用当前环境变量 execl 列表 不是 是 execlp 列表

    8910

    雪城大学信息安全讲义 3.3 提升 Set-UID 程序的安全性

    函数execlp和execvp使用 Shell 来启动程序。它们使程序的执行依赖于当前用户安装的 Shell。例如,依赖于PATH和其它环境变量的值。...system(CMD)调用向 Shell 传递字符串来执行子进程(即作为单独派生的进程)。它是个用于执行 EXEC 函数的方便的前端。 popen的标准实现也与之相似。...不使用system,而是execve:execve不调用 Shell,system调用。 避免execlp (file, ...)和execvp(file,...),它们的语义类似于 Shell。...它们使用文件内存作为 Shell 的标准输入,如果文件不是有效的可执行目标文件。 小心可能使用 Shell 实现的函数。 Perl 的open函数可以执行命令,通常通过 Shell 来这么做。...因此,在 Set-UID 中调用system(CMD),CMD 不会使用 Root 权限执行,除非 CMD 本身也是个 Set-UID 程序。下面 代码在 Bash 中丢弃了 Set-UID 位。

    41430

    极简shell制作

    简单配置Linux文件   首先,再开始项目之前,需要先简单配置一下Linux文件,选择一个位置,创建本次项目的目录: mkdir myshell#名字随意,这里方便区分命名myshell   如图所示在该目录下..., NULL, 0);//阻塞等待子进程 printf("run done, rid: %d\n", rid);   如果要执行命令,那就需要进行程序替换,但是程序替换我们介绍了七个接口,使用哪一个接口会比较好呢...带 ‘v’ 的接口也有三个,execvp 接口是最好的选择,为什么大家可以自己思考一下,很简单: execvp(argv[0], argv);//根据命令在环境变量里查找,在根据选项做出对应的动作   ...其实这是因为我们一直是在使用子进程执行命令的,所以仅仅是子进程一直在切换目录,父进程的目录却一直不变。   所以向cd 这种命令,我们就不能交给子进程操作,而这样的命令我们称为 内建命令。   ...export命令处理   当我们在 自定义 Shell 中导入一个新的环境变量,也是由子进程进行程序替换完成这件事的,所以,当我们使用hell进行env,是看不到导入的环境变量的:   所以,export

    13110
    领券