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

在execvp返回之后,为什么我的程序不会从它停止的地方开始?

在使用execvp函数时,程序会在执行新的程序后停止执行原有程序的代码。如果在execvp返回后,程序仍然从停止的地方开始执行,这通常意味着execvp函数没有成功执行新的程序。

execvp函数的作用是在当前进程中执行一个新的程序,并将参数列表传递给新程序。如果新程序执行成功,execvp函数将不会返回。如果execvp函数返回,则表示新程序没有成功执行,通常是因为指定的程序路径或名称不正确。

要解决这个问题,可以检查execvp函数的参数是否正确,并确保指定的程序路径或名称正确无误。同时,可以使用perror函数或strerror函数来获取更详细的错误信息,以便更好地诊断问题。

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

希望这个答案能够帮助您解决问题。

相关搜索:为什么我的for循环增量超过了它应该停止的地方?如何从我的按钮开始的地方开始文本,并且我不想让它向外流动?spring batch重新启动作业从初始阶段开始,而不是从它停止的地方开始?我在计时器上遇到了问题,如果我暂停计时器,它不会从停止的地方开始。为什么我的chartjs上的数据没有从它应该开始的数据开始为什么我的C程序在中途停止运行?在尝试查找最后填充的行之后,我的宏不会停止运行有没有办法从Python程序中重新启动我的计算机,然后从它停止的地方继续执行?为什么我的刚体在碰撞时不会停止移动?为什么我的SVG路径一次在两个地方开始绘制?为什么我的程序在扫描后停止工作?为什么我的组件的html在成功路由到它之后没有显示?在spark scala数据帧中迭代时,如何存储指向“从您停止的地方开始”的指针?为什么我的网络爬虫在我运行它的时候没有返回任何信息?为什么我的Image.Source在设置它的流之后仍然是黑色的?为什么在调试期间暂停我的项目会停止其他程序?有没有一种方法可以在Flutter中保存状态,以便应用程序从我们停止的地方开始?如何编写代码来读取输出文件,以计算出它在抓取网站上走了多远,然后从它停止的地方开始为什么我的网络活动图标不会显示在我的iPhone应用程序中HTML/JavaScript为什么我的表单一直在重定向,我如何停止它?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

fork,wait和exec

fork,wait和exec fork系统调用 wait系统调用 exec系统调用 为什么要把fork和exec分开 ---- fork系统调用 1、子进程不会 main()函数开始执行,而是直接...但是,我们常常想运行不同程序,exec()正好做这样事 这个例子中,子进程调用 execvp()来运行字符计数程序 wc。...因此,并没有创建新进程,而是直接将当前运行程序(以前 p3)替换为不同运行程序(wc)。子进程执行 exec()之后,几乎就像p3.c 从未运行过一样。...fork和exec分开 构建UNIX shell 时候非常有用,因为这给了shell fork 之后exec 之前运行代码机会,这些代码可以在运行新程序前改变环境,实现一些有趣功能。...这样,即将运行程序wc 输出结果就被发送到该文件,而不是打印屏幕上。

1K20

对python中return与yield区别详解

首先比较下return 与 yield区别: return:程序函数中返回某个值,返回之后函数不在继续执行,彻底结束。...看做“return”,这个是直观首先是个return,普通return是什么意思,就是程序返回某个值,返回之后程序就不再往下运行了。...yield,代码输出这个: starting... 4 ******************** res: None 4 直接解释代码运行顺序,相当于代码单步调试: .程序开始执行以后...,这个时候和上面那个差不多,不过不同是,这个时候是刚才那个next程序停止地方开始执行,也就是要执行res赋值操作,这时候要注意,这个时候赋值操作右边是没有值(因为刚才那个是return出去了...next停止地方执行,所以调用next时候,生成器并不会foo函数开始执行,只是接着上一步停止地方开始,然后遇到yield后,return出要生成数,此步就结束。

76210
  • Linux进程控制

    一.进程创建 fork()函数: 进程概念这篇文章中,我们浅浅地了解了一下fork函数,功能是让父进程去创建一个子进程,并且有两个返回值,对应着父进程返回值和子进程返回值。...main返回 2. 调用exit 第一种很好理解,我们程序都是main函数开始,最后由main函数return 0来返回,终止程序。对于第二种,我们需要认识exit()函数。...char *const argv[]); 函数解释: 这些函数如果调用成功则加载新程序启动代码开始执行,不再返回。...所以我们回到上面的那个问题,为什么第二个printf没有执行? 答案就是:因为第二个printf是execl之后执行了execl后,第二个printf被覆盖掉了,所以也就没办法执行了。...由此,子进程程序替换也不会影响到了父进程。

    2.4K30

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

    基本原理 当进程调用一种exec函数时,该进程用户空间代码和数据完全被新程序替换,从新程序启动例程开始执行。...调用exec并不创建新进程,所以调用exec前后该进程id并未改变 我们知道,进程=内核数据结构+代码数据 程序替换本质是将当前进程代码和数据进行替换。 替换时候,会不会创建新进程?...所以为什么上述现象中,原来进程中printf("testexec end! ...\n"); 没有执行原因是,调用execl函数后,去执行ls程序了,原来代码和数据被替换了。...exec系列函数执行完毕后,后续代码不见了,因为被替换了,因此没有机会去执行了。 不用关心exec系列函数返回值,只要替换成功,就不会向后面执行;反之,一定是替换失败。...可执行程序testexecl磁盘中加载到物理内存中。

    7710

    Linux:进程控制(二.详细讲解进程程序替换)

    这个函数作用是在当前进程上下文中启动一个新程序,并替换当前进程映像为新程序映像。调用execl函数后,当前进程将停止执行,并由新程序开始执行。...\n"); return 0; } 如果execl函数调用成功,那么实际上不会返回,因为当前进程映像已经被新程序替换。如果调用失败,它会返回-1,并设置全局变量errno以指示错误原因。...因为被替换掉了,这也是什么代码没有输出execl end原因了 exec函数调用成功,那么实际上不会返回值;调用失败,它会返回-1 exec函数不会创建新进程。...这个过程涉及将新程序内容磁盘加载到内存中,为进程提供执行所需资源。...,定义 头文件中。

    18110

    exec族

    这个一直没搞太明白,相识度高是一回事,不会用又是另一回事儿。 所以今天又温故了一遍: 为什么需要exec函数?...exec族函数可以直接把一个编译好可执行程序直接加载运行。 有了exec族函数后,典型打父子进程程序是这样:子进程需要运行程序被单独编写、单独编译链接成一个可执行程序(hello)。...主进程为父进程,fork创建了子进程后子进程中exec来执行hello,达到父子进程分别做不同程序同时(宏观上)运行效果。...,出错返回-1....PATH变量查找子程序文件 e 函数传递指定参数envp,允许改变子进程环境,无后缀e时,子进程使用当前程序环境 下面找到一些通俗易懂栗子,算是让明白了一点: #ifdef HAVE_CONFIG_H

    1.1K10

    Linux-Copy On Write写时复制机制初探

    (函数族exec( )是一组函数统称, 包括了execl()、execlp()、execv()、execle()、execve()、execvp()等) fork fork是类Unix操作系统上创建进程主要方法...); return 0; } 输出结果 是子进程,由父进程fork出来 统计结果是: 1 是父进程 统计结果是: 1 fork 函数会有两次返回 1) 将子进程PID返回给父进程...---- 为什么有了COW? 早期 Unix 实现 fork 系统调用时,并没有使用该技术,创建新进程开销很大。...现在Linuxfork()使用写时拷贝页来实现新进程创建,它是一种可推迟甚至避免数据拷贝技术,刚开始时内核并不会复制整个地址空间,而是让父子进程共享地址空间,只有写时才复制地址空间,使得父子进程都拥有独立地址空间...如果子进程不对内存空间进行写入操作的话,内存空间中数据并不会复制给子进程,这样创建子进程速度就很快 ,因为不用复制,直接引用父进程物理空间 ,并且如果在fork函数返回之后,子进程第一时间exec

    3.4K10

    Linux进程控制

    Linux进程简介 进程是操作系统中一个重要概念,它是一个程序一次执行过程,程序是进程一种静态描述,系统中运行每一个程序都是进程中运行。...新进程不是被创建,而是被复制,或是以前进程复制而来。Linux中所有的进程都是由一个进程号为1init进程衍生而来。...pid = fork();之前,只有一个进程执行代码,但在该语句之后,有两个进程执行之后代码,根据pid不同执行不同语句。...与一般情况不同,exec函数族执行成功后不会返回,因为调用进程实体,包括代码段、数据段和堆栈段都被新内容取代,只是进程ID等一些表面上信息仍保持原样。...exit()调用之前要检查文件打开情况,把文件缓冲区内容写回文件;_exit()则直接使进程停止,清除其使用内存空间,并销毁其在内核中各种数据结构。

    2K30

    【Linux】进程控制

    进程常见退出方法: main函数return返回。...进程为什么要等待 1.父进程通过进程等待方式,回收子进程资源 2.获取子进程退出信息 进程等待方法 wait 返回值:成功返回被等待进程pid,失败返回-1。...当进程调用一种exec函数时,该进程用户空间代码和数据完全被新程序替换,从新程序启动 例程开始执行。...printf也是代码,exec之后,exec执行完毕之后代码已经全部被覆盖,开始执行新代码,所以第二个printf就无法执行了。...对于返回值问题: 这些函数如果调用成功则加载新程序启动代码开始执行,不再返回,和接下去代码无关了。如果调用出错则返回-1,所以exec函数只有出错返回值而没有成功返回值。

    19430

    【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    fork代码后,内核做: 分配新内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回开始调度器调度 当一个进程调用fork之后,就有两个二进制代码相同进程...而且它们都运行到相同地方。...另一个after消息有28112打印。注意到进程28112没有打印before,为什么呢?如下图所示: 所以,fork之前父进程独立执行,fork之后,父子两个执行流分别执行。...当进程调用一种exec函数时,该进程用户空间代码和数据完全被新程序替换,从新程序启动例程开始执行。...其中时间左向右。shell由标识为sh方块代表,随着时间流逝左向右移动。shell用户读入字符串"ls"。

    13710

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

    —— 尾田荣一郎《海贼王》 开始学习进程替换吧 1 前言 通过学习进程替换,我们可以体会到多语言混搭快乐,可以C语言直接蹦到python ,也可以c++里运行java代码。是不是很厉害!...),可是执行是我们代码,怎么就运行了ls 这个程序呢?...当进程调用一种exec函数时,该进程用户空间代码和数据完全被新程序替换,从新程序启动 开始执行。 调用exec并不创建新进程,所以调用exec前后该进程id并未改变 没有创建新进程!!!...exec* 就类似一个Linux 上加载函数。 而且我们不用关心exec*函数返回值,只要替换成功了,就不会向后运行(也就用不到返回值了),只要继续运行那一定就是替换失败了!!!...这样应该就可以运行ls命令还不会影响原本程序

    8910

    Linux之进程控制

    fork函数实现在操作系统内部,当这个函数准备返回时,核心代码已经执行完了也就是子进程已经被创建了,并且已经OS运行队列中准备被调度了。...2.进程退出方法 主函数(main函数)return返回程序任意位置调用exit(code); 系统调用_exit(code); 3....3.替换原理 为什么调用替换函数后,原程序剩余部分不再执行?...当进程调用exec系列函数时,该进程用户空间代码和朱家具完全被新程序替换,从新程序启动例程开始执行。 要注意,调用exec并不创建新进程,所以调用exec前后该进程id并未改变。...因此,原进程后续代码会被新进程代码和数据所覆盖,因此就不会执行剩余代码了。 这也是为什么只有当程序替换失败才会有返回值,因为如果替换成功就不会执行接下来代码,返回值就无意义。

    18520

    C++中exec()函数

    exec()函数C++中是一个进程控制函数,用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程代码和数据,创建新进程运行其他程序。...前言 fork 函数之后,如果想要把子进程换成一个想要执行进程,这时,就不得不使用 exec()函数了,这也是 fork()意义所在。...常见fork()调用例子有很多,比如从 wechat发起一个语音电话、 bash或者zsh执行一个 a.out 程序,都是利用exec系统调用将新产生子进程完全替换成目标进程。.../fork_example 程序就会结束!以上例子,可以看到我们子进程,就是由一个父进程fork()之后替换。...(const char *file, char *const argv[]) 参数: path参数表示你要启动程序名称,包括路径名; arg参数表示启动程序所带参数,一般第一个参数为要执行命令名 返回

    28920

    极简shell制作

    ,后续程序不会往下走,又因为进程之间具有独立性,所以需要创建一个子进程来完成进程替换这件事情。...带 ‘v’ 接口也有三个,execvp 接口是最好选择,为什么大家可以自己思考一下,很简单: execvp(argv[0], argv);//根据命令环境变量里查找,根据选项做出对应动作   ...✈️内建命令处理 cd命令处理   我们来看这样一个现象:   命名已经切换目录很多次了,但是为什么目录没有改变呢?...路径显示问题   这里还有一个很明显错误行为,命令行解释器路径开始就没有变过,其实是因为我们没有更新PWD环境变量,我们可以手动给当前进程更新环境变量,使用一个数组存储当前目录,再使用 putenv...这个命令,这个命令需要显示上一个进程退出码,而获取进程退出码,这个时候我们就需要先在全局范围内设置退出码变量: int lastcode = 0;//退出码   退出码是执行完进程之后返回结果,

    12810

    操作系统实验二归纳

    这些函数调用成功后不会返回,其进程正文(text),数据(data)和栈(stack)段被待执行 程序程序覆盖。...execv 和 execvp 函数提供指向 NULL 结尾字符串指针数组作为新程序参数列表。作为约 定,指针数组中第一个元素应该指向执行程序名自身。指针数组必须用 NULL 指针结束。...这个附加参数是指向 NULL 结尾字符串指 针数组,必须用 NULL 指针结束。其它函数当前进程 environ 外部变量中获取新进程环境。...execlp和execvp可根据path搜索合适程序运行,其它则需要给出程序全路径。 execve()类似 execv(),但是加上了环境处理。...,创建一个进程,如果该进程pid<0(当然创建fork成功会返回大于0数)提示fork失败。

    76250

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

    各种替换函数间关系 这些函数都属于 exec 替换家族,所以它们返回值都一样 注意: 这七个函数只有程序替换失败后才会有返回值,返回 -1,程序替换成功后不返回 程序都已经替换成功,后续代码也都将被替换...,只要待替换程序路径位于 PATH 中,就不会替换失败 2.4、函数4 execvp execv 加个 p 也能实现自动查询替换,即 execvp #include int execvp.../other/CPP", NULL, environ); //继承环境变量表 结论: 如果主动传入环境变量后,待替换程序原环境变量表将被覆盖 现在可以理解为什么 bash 中创建程序并运行,...,列表传递 v 为 vector,顺序传递 p 表示 PATH,根据程序名自动 PATH 中查找 e 则是 environ,是否手动传递环境变量表 3.2、替换现象 子进程程序替换后,并不会创建新进程...,在学完这些知识后,我们就可以实现一个简单 bash,体验一下自己程序中输入指令操控 Linux 奇妙体验 如果你觉得本文写还不错的话,期待留下一个小小赞,你支持是分享最大动力!

    23520

    【Linux】进程控制:理解什么是进程创建,进程终止,进程等待 | 进程替换

    我们知道子进程退出时会变成僵尸进程: 僵尸进程无法被杀死,需要通过进程等待来杀掉,进而解决内存泄漏问题---必须解决 我们要通过进程等待,获得子进程退出情况---知道布置给子进程任务,完成怎么样了...在理解什么是进程替换之前,我们先来看看进程替换怎么使用,下面是操作系统提供进程替换一些函数 这些函数如果调用成功则加载新程序启动代码开始执行,不再返回。...对于像execl 和 execlp 有可变参数函数,其实它们使用方法很简单,第二个参数开始,参数写法就很我们命令行中一样,且最后一个参数是NULL。...也就是 execl 前面的代码会被执行,后面的代码不会被执行,这是为什么?...进程替换原理: 进程替换时,只会替换掉物理内存中原来程序代码和数据,其它不会动,且调用exec并不创建新进程,所以调用exec前后该进程id并未改变。

    26310

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

    当fork()函数返回值为0时表示处 于子进程中;而返回值大于0时表示处于父进程中,此时返回值是子进程进程id。因此,fork()返回值可以用来划分仅仅适合父进程 和子进程执行程序段。...fork()函数返回值为-1时表示出错。 如果子进程只是运行与父进程完全一样程序,那用处是很有限。要让子进程运行不同于父进程程序,就必须调用execve函数,它是 所有其他exec函数基础。...execve函数把调用它进程程序,替换成execve函数参数所指定程序。运行execve函数成功后,进程 将开始运行新程序,也就是execve函数参数所指定程序。...一般命令都可以由fork+execvp执行,由fork创建一个子进程,调用一种exec函数时,该进程执行程序完全替换为新程序 而新程序则从其main函数开始执行; 但要注意exec并不创建新进程,所以前后进程...,若有重定向输入输出,则在redirect_stdin或 redirect_stdout中处理,execvp填入可执行文件参数,子进程开始执行,若出错才会执行下面的execvp error打印错误语句,

    92320

    【Linux】进程理解与学习-程序替换

    如下图所示: 程序替换原理 原理图解 ​ 通过上图,也解释了为什么执行我们进程时,execl函数后面的end打印并没有执行,因为我们执行完打印begin后,开始调用系统调用函数execl,将新程序...当然我们也可以通过代码来验证一下: ​ 多进程对应程序替换 当然,假如我们使用fork创建子进程,让子进程完成程序替换,子进程程序替换并不会影响父进程,这是因为父子进程都有各自独立PCB,并且由于写时拷贝机制存在....); 对于该函数来说: 返回值:失败返回-1,替换成功执行新程序。 path参数:新程序路径位置(找到) arg参数:新程序名称(执行) ......对于该函数: 返回值:替换失败返回-1 file传程序名,会根据程序名自动PATH中搜索该程序对应路径。(找到,不需要我们传具体路径,会自动匹配) 后面的arg表示程序名(执行) ......int execvp(const char *file, char *const argv[]); 对于该函数: 返回值:替换失败返回-1 file:程序名,会根据程序名自动搜索PATH中对应路径

    1.1K30

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

    #include pid_t fork(void); 返回值:子进程中返回0 父进程中返回子进程id,出错返回-1 【2】fork函数中写时拷贝 通常,父子代码共享...例如:子进程fork返回后,调用exec函数(后文进程替换会提到) 二.进程终止 1.进程退出场景 代码运行完毕,结果正确 代码运行完毕,结果不正确 代码异常终止 2.进程应对不同退出场景退出方法...; sleep(6); _exit(1); }现象:不立刻显示,6s后程序退出,也不会刷新显示 2.main返回——return退出——等同于正常退出exit return是一种更常见退出进程方法...,要维持进程独立性——写时拷贝解决;我们有结论: 程序替换也存在写时拷贝 【2】进程替换机制&情景演示 机制: 进程替换成功: 子进程执行新程序了, 剩下代码不会执行了,被覆盖了。...execvp("ps", argv); exit(0); } 【4】exec类函数原理 事实上, 只有execve是真正系统调用 ,其它五个函数最终都调用 execve 所以execveman手册

    8310
    领券