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

如何打印execlp系统调用后的行

execlp是一个系统调用函数,用于在Linux系统中执行一个可执行文件。它的原型如下:

代码语言:txt
复制
int execlp(const char *file, const char *arg, ...);

该函数的作用是将当前进程替换为指定的可执行文件,并传递给可执行文件的命令行参数。它会搜索系统的环境变量$PATH,找到与file参数指定的可执行文件名匹配的文件,并执行该文件。

execlp系统调用后的行为如下:

  1. 首先,execlp会搜索系统的环境变量$PATH,找到与file参数指定的可执行文件名匹配的文件。
  2. 如果找到了匹配的文件,execlp会将当前进程替换为该可执行文件,并传递给可执行文件的命令行参数。
  3. 如果找不到匹配的文件,execlp会返回-1,并设置errno为ENOENT(文件不存在)。

使用execlp系统调用可以实现在程序运行过程中动态地执行其他可执行文件,例如在一个程序中调用另一个程序来完成特定的任务。

下面是一个示例代码,演示了如何使用execlp系统调用来执行一个可执行文件:

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

int main() {
    // 执行ls命令
    execlp("ls", "ls", "-l", NULL);

    // 如果execlp执行成功,下面的代码不会被执行
    perror("execlp");
    return -1;
}

在上面的示例中,我们使用execlp执行了ls命令,并传递了"-l"参数。如果execlp执行成功,它会替换当前进程为ls命令,并输出当前目录下的文件列表。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云函数计算(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(MPS):https://cloud.tencent.com/product/mps
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅供参考,具体的产品选择应根据实际需求和情况进行评估。

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

相关·内容

嵌入式linux下如何尽快播放开机音乐

今天在考虑如何尽快启动一个应用程序,播个开机音乐什么。...最开始启动流程是这样,bootloader 启动kernel,kernel跑完挂载文件系统, 然后会执行/init,而这个init 是指向busybox一个软链接, busybox做一些事情后,会解析...大概一秒音乐。 那么问题就是,如何尽快播放这个开机提示音乐。 先来个简单粗暴,直接加到rcS脚本后面, #!/bin/sh /etc/init.d/zqbNetwork start ....这么做了之后,好一些了,五秒多就可以听到声音了,打印“/ #”时间也在五秒多(比原来慢一些,毕竟多跑了个线程抢资源) 这个时候,忍不住就要想,能不能再往前提,我干脆提到跟init并行,不改文件系统的话...不过播放音乐这个进程,抢资源还是比较多,打印“/ #”时间比没播音乐情况,延迟了七八百毫秒。但总比串行执行,延迟一秒多,要好些。

1.6K10

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

换句话说, main函数 退出码是可以被父进程获取,用来判断子进程运行结果 【2】异常退出(程序崩溃)——操作系统转换成信号——进程被操作系统杀掉 我们输入kill -l 可以看到有许多信号 崩溃时就是执行了...我们需要知道父进程派给子进程 任务完成的如何 ,如:子进程运行完成,结果对还是不对,或者是否正常退出。..., 逐步打印完蓝色部分后(子进程) 【先后顺序与操作系统调度有关,不确定谁先开始,但一般是父进程最后退出】 本质:子进程和父进程同时存在——>子进程变成 僵尸状态 ——>等待结束时, 子进程消失 ,只剩下父进程...,而打印打印整体,也就是2560 四.进程程序替换 1.进程替换概念 【1】进程替换概念 我们所创建所有的子进程,执行代码,都是父进程代码一部分 如果我们想让子进程 执行新程序呢???...只有失败才有返回值 演示: 当程序替换成功时,打印语句begin和执行替换后语句,不打印语句end 当程序替换失败时,打印语句begin和语句end //注:我们只要知道下面execl函数是 起到进程替换作用就行

8910
  • 【Linux进程控制】四、exec函数族——进程替换详解

    进程替换概念 我们在使用fork()系统调用之后,创建出来子进程是对父进程复制,也就是说子进程和父进程执行是相同程序,虽然说父子进程可能执行是不同代码分支(if else语句),但是程序流程是一样...; /*只有出错才会返回,如果不出错的话,就不会再返回该程序*/ perror("execlp err"); /*测试execlp成功式是否会返回,如果这句话没有打印...\n"); return 0; } 这样我们在执行exec_test程序时候会被直接替换为 ls -lrt 进程,并且我们测试语句printf没有打印,这说明execlp()函数执行成功后不会返回...0; } 3. exec函数族调用关系 我们在上面列出5个exec函数最终都会调用execve系统调用,我们在查man手册时候也能发现,上面5个在第3章,使用 man 3 execl 就可以把5...个函数一块查到,而execve是一个系统调用,它在第二章。

    13010

    如何利用 JuiceFS 性能工具做文件系统分析和

    本文我们从单机应用入手,看依赖单机文件系统应用是否也可以用在 JuiceFS 之上,并分析它们访问特点进行针对性优。...依然以 Redis 项目为例,测试编译耗时为: Ext4:0m29.348s JuiceFS:2m47.335s 我们尝试大元数据缓存参数,整体耗时下降约 10s。...,通过调整文件系统挂载参数做针对性优化。...毫无疑问,本地文件系统与 JuiceFS 等分布式文件系统存在着天然特征差异,二者面向应用场景也截然不同。...本文选择了两种特殊应用场景,只是为了在差异鲜明情境下介绍如何为 JuiceFS 做性能优,旨在抛砖引玉,希望大家举一反三。

    72640

    Android监听自身卸载,弹出用户反馈调查

    不知道大家在使用一个Android应用时候,当我们卸载这个应用后,设备上会弹出一个“用户反馈调查”网页出来,也许很多人没有留意过或者直接忽视了,那么从现在开始请留意,大家不妨下载一下“豌豆荚”“360...AM命令         Android系统提供adb工具,在adb基础上执行adb shell就可以直接对android系统执行shell命令         am命令:在Android系统中通过...()函数           execlp函数简单来说就是C语言中执行系统命令函数           execlp()会从PATH 环境变量所指目录中查找符合参数file 文件名, 找到后便执行该文件...android开发中,execlp函数对应androidpath路径为system/bin/目录下 调用格式: execlp("am","am","start","--user","0","-a",...注意:为了简便起见,我在C代码监视应用是否被卸载时候,使用了一个While(true)死循环,并且是每隔1毫秒执行一次监视检测,这样写代码是“不环保”,想想这样结果是程序被不停执行,LOG被不停打印

    3K50

    ESP8266_02程序编译与下载

    理解了这两点,剩下就好理解了。 user_init(void)函数里面只包含了三代码:第一通过串口打印当前SDK版本,第二打印当前程序编译时间。...第三稍微麻烦一点,它是在注册系统初始化完成函数。如果是搞单片机,估计大部分是第一次听说回函数。...关于回函数,这里摘抄一段网上讲比较好说明: 对普通函数调用: 调用程序发出对普通函数用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。...从发出调用程序角度看,这个过程为“调用-->等待被调用函数执行完毕-->继续执行” 对回函数调用: 调用程序发出对回函数用后,不等函数执行完毕,立即返回并继续执行。...普通函数调用是直接或者间接由main函数发起。回函数由系统发起调用,与main函数无关。 也就是说,官方提供SDK,是内含一个系统,而咱们程序是在这个系统下运行。

    80141

    【Linux】进程程序替换

    ,父进程通过if判断分流让子进程去跑了 2.创建一个子进程不执行父进程代码,而是让子进程在磁盘当中执行全新程序,这种操作称之为进程程序替换 2.了解程序是如何进行替换 程序替换函数 execl.../可执行程序就变成进程了,CPU调度进程 ,打印出代码中打印语句,同时调用程序替换execl,将ls程序执行起来了 ---- [yzq@VM-8-8-centos nn]$ file /bin/ls...,当子进程进行程序替换时候,子进程会加载新进程代码和数据 操作系统会发生写时拷贝,将代码和数据进行区分 ,使子进程形成新映射关系,从而使子进程不会影响到父进程 execl 返回值 如果出错了...int execlp(const char *file, const char *arg, ...); 带p:代表当执行程序时候,只需要指定程序名即可,系统会自动在PATH环境变量中查找 file:...-a ,就会打印出 ls -a,但是输入时会多出一个空行 ---- 正常来说,都会使用回车来到下一,而这个回车被fgets读取到了 ---- 将最后回车符替换成'\0' ---- 此时就没有空格出现了

    2K30

    Linux下exec函数族详解

    (const char *path, const char *arg, .../* (char *) NULL */); int execlp(const char *file, const...由于execl成功调用后这个进程代码段都被替换了,自然下面的代码就不会再执行了,所以也就没有返回值了,但是当调用失败后就会返回-1并设置errno值。...那么在成功调用后实际上这个进程就变成了ls,然后执行ls -l命令,因为我们用是execl函数,所以第一个参数就需要用ls所在目录,第二个参数其实没有实际意义,因为已经指定了ls所在位置,所以第二个参数随便设置就可以但是不可以没有...charles charles 163 Feb 27 15:49 a.c -rwxr-xr-x 1 charles charles 8384 Feb 27 15:49 test        如果是用execlp...,那么第一个参数就可以不用加ls路径了,直接是ls就可以了,因为系统会去PATH中查找。

    8.4K30

    【Linux】进程程序替换

    然后,我们要找到程序执行方法,就是在命令行中如何执行,就要如何传入。除第一个外,其他参数都是用来传入执行方法。执行方法传入完毕后,以null结尾。...程序替换本质就是:将指定代码和数据,加载到指定位置,然后覆盖自己代码和数据。 为什么在单进程运行结果中,第一条打印语句执行了,而第二条打印语句没有执行?...详解如下: 1.execlp 程序替换类函数函数名称共同部分为:exec。然后后面再加不同字母,显然这些字母代表着不同含义: l:list。表示将参数逐个传入。 p:path。...\n"); } 在execl函数参数中,有两个“ls”,冲突吗?不冲突,第一个是告诉系统我要执行谁,一个是告诉系统我要如何执行。...\n"); } 运行一下: 3.execle e:传入自定义环境变量,即可以查询系统环境变量。

    9110

    Linux进程控制

    Linux进程简介 进程是操作系统一个重要概念,它是一个程序一次执行过程,程序是进程一种静态描述,系统中运行每一个程序都是在它进程中运行。...进程4要素 要有一段程序供该进程运行 进程专用系统堆栈空间 进程控制块(PCB),具体实现是task_struct结构 有独立存储空间 Linux系统中所有的进程是相互联系,除了初始化进程外,所有进程都有一个父进程...当前进程数已达系统规定上限,此时errno值被设置为EAGAIN 系统内存不足,此时errno值被设置为ENOMEN errno是Linux下一个宏定义常量,当Linux中C API函数发生异常时...fork()不对父子进程执行次序作限制,而vfork()调用后,子进程先运行,父进程挂起,直到子进程调用了exec()或exit()后,父子进程执行次序才不再有限制。...,等待大约10秒,第2才输出,这10秒就是子线程睡眠时间。

    2K30

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

    指令 本质上就是在进行程序替换 关于简易版 bash 实现方法,将在下篇文章中揭晓 ---- 2、七大替换函数 进程程序替换函数共有七个,其中六个都是在调用函数6,因此函数6 execve 才是真正系统级接口...答案是可以execlp 函数在进行程序替换时,可以不用写 path 路径 #include int execlp(const char* file, const char*...iostream> using namespace std; extern char** environ; //声明环境变量表 int main() { int pos = 0; //只打印...,默认传递当前程序中环境变量表 2.6、函数6 execve execve 是系统真正提供程序替换函数,其他替换函数都是在调用 execve 比如 execl 相当于将链式信息转化为 argv 表...,但在 OS 看来都属于 可执行程序,数据位于 代码段 和 数据段,直接替换即可 系统级接口是不分语言,因为不论什么语言最终都需要调用系统级接口,比如文件流操作中 open、close、write

    23820

    C++中exec()函数

    常见fork()调用例子有很多,比如从 wechat发起一个语音电话、从 bash或者zsh执行一个 a.out 程序,都是在利用exec系统调用将新产生子进程完全替换成目标进程。...,包括路径名; arg参数表示启动程序所带参数,一般第一个参数为要执行命令名 返回值:成功返回0,失败返回-1 上述exec系列函数底层都是通过execve系统调用实现: #include <unistd.h...,而最后2个函数(也就是以p结尾两个函数)可以只给出文件名,系统就会自动从环境变量“$PATH”所指出路径中进行查找。...读者可以观察execl、execle、execlp语法与execv、execve、execvp区别。 ③ 环境变量:exec函数族使用了系统默认环境变量,也可以传入指定环境变量。...并不会被打印出来 printf("good bye!\n"); return 0; } 执行结果: hello! .

    29920

    L14c程序执行环境变量

    c程序执行环境变量 C程序中环境变量相关函数如下 #include char *getenv(const char *name); int setenv(const char...命令如下 echo $PATH 打印PATH环境变量 export PATH=$PATH:./ 设置环境变量 unset PATH 删除环境变量 env 显示所有环境变量 execl函数 execve(...执行文件)在父进程中fork一个子进程,在子进程中调用exec函数启动新程序。...exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve库函数。....); execl()其中后缀"l"代表list也就是参数列表意思,第一参数path字符指针所指向要执行文件路径, 接下来参数代表执行该文件时传递参数列表:argv[0],argv[1]...

    39630

    Linux之进程控制

    就可以查看最近一个进程退出码 每个退出码都有对应退出信息,一般用0表示程序正常退出,用非0表示错误,库中给我们提供了134个错误码,可以将其对应错误信息都打印出来看看: 3.代码没跑完...: int main() { printf("hello world"); sleep(2); exit(0);//_exit(0); return 0; } 有了前面的基础我们知道缓冲区是刷新...,没有\n虽然printf是先执行,但是也会在程序退出以后才打印语句 首先来看使用exit时结果: 再来看看使用_exit时结果: 可以看到两者之间最大区别就是exit在程序结束时会将缓冲区内数据刷新出来...---- 2.waitpid 同样是父进程用于回收子进程系统调用,但这个系统调用还能顺便拿到子进程退出时退出码和信号。...auto","-a","-l",NULL/*如何执行*/);//一定要用NULL结尾 printf("process is down·····\n");//这句话并不会被打印,因为后续代码和数据已经被

    81110

    Linux下使用exec族函数进行进程替换

    .); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg,...*const argv[]); int execve(const char *path, char *const argv[], char *const envp[]); 注意:只有execve函数是系统调用...:以逐个列举方式表示要执行程序格式:例如准备执行“创建子进程”这个程序,那么应该传递参数为:“./创建子程序”, NULL. argv[]:以指针数组形式表示要执行程序格式。...所以使用时候应当注意,如果还想回到原来进程继续执行,那么需要先使用fork函数来创建一个进程,在这个进程中使用exec函数来完成进程替换。这样才能保证原进程能在exec调用后不被破坏。...exec函数调用后虽然替换了进程,但是却保留PID。

    1.3K20

    【Linux】进程控制

    ---- 二、退出码 main函数return 0在系统上叫做进程退出时对应退出码,标记进程执行结果是否正确 我们如何找到写代码完成任务结果如何?进程退出码,可用echo $?...查询: 到了这,有一个问题:那该如何设定main函数返回值?...对于exit():结果会打印出来,对于_exit():结果没有显示,这是因为缓冲区缘故。 所以exit()终止进程,会主动刷新缓冲区,_exit()终止进程,不会刷新缓冲区。...PATH e(env) : 表示自己维护环境变量 execlp execv execvp execle 这里系统环境变量是null,这其实很好理解,被调起来程序获得了环境变量,这也说明了环境变量具有全局性...如何同时获得系统环境变量?putenv 前面这些都是执行系统命令,如何执行自己写程序: 注意:进程执行时候,execl先执行,main后执行。

    19430

    1(UNIX基础)

    公用函数库在系统调用之上,应用软件既可以使用公用函数库,也可以使用系统调用。(系统调用和库函数比较在最后) 2 列出一个目录中所有文件名字,也就是命令ls实现 Figure 1.3....它有两个优点: 1) 无须担心如何选取最佳缓冲区大小 2) 简化了对输入行处理 The function getc reads one character at a time, and...信号是通知进程已发生某种情况一种技术。例如,若某一进程执行除法操作,其除数为0,则将名为SIDFPE(浮点异常)发送给进程。进程如何处理有三种选择: 1.忽略该信号。...我们需要提供自编函数来处理它 10 系统调用与库函数 系统调用实际上就是指最底层一个调用,在linux程序设计里面就是底层调用意思。面向是硬件。...系统调用是操作系统相关,因此一般没有跨操作系统可移植性。

    84930
    领券