c - C execve() 函数是否终止子进程?

标签 c fork switch-statement execv

这是我的代码的 segmentation 。

我有一个程序可以 fork 一个 child (并在一个文件中注册 child 的 pid),然后做它自己的事情。 child 成为程序员用 argv 尊严的任何程序。当子进程完成执行时,它会向父进程发送一个信号(使用 SIGUSR1),以便父进程知道从文件中删除子进程。父级应该停下来,通过更新表来确认删除的条目,然后从中断处继续。

pid = fork();
switch(pid){
case -1:{
    exit(1);
}

case 0 :{
    (*table[numP-1]).pid = getpid(); //Global that stores pids
    add();                             //saves table into a text file 
    freeT(table);                  //Frees table 
    execv(argv[3], &argv[4]);          //Executes new program with argv 
    printf("finished execution\n");  
    del(getpid());                     //Erases pid from file 
    refreshReq();                      //Sends SIGUSR1 to parent
    return 0;
}
default:{
    ... //Does its own thing
}
}

问题是 after execv 成功启动并完成(return 0 之前的 printf 语句让我知道),我没有看到正在执行的 switch 语句中的其余命令。我想知道 execv 中是否有一个 ^C 命令,它会在它完成时杀死 child ,从而永远不会完成其余的命令。我查看了手册页,但没有发现任何关于该主题的有用信息。

谢谢!

最佳答案

execv 用不同的程序替换当前正在执行的程序。一旦新程序完成,它不会恢复旧程序,因此它被记录为“成功时,execv 不返回”。

因此,当且仅当 execv 失败时,您应该看到消息“完成执行”。

关于c - C execve() 函数是否终止子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172257/

相关文章:

c - 使用 exec、c 程序从另一个 .c 读取管道

kotlin - 如何在 Kotlin 中实现 switch-case 语句

c++ unzip 返回无法创建提取目录

c++ - 使用 fork 执行多个命令

javascript - 在 JavaScript 中切换大小写

javascript - 在 javascript 中打开复选框的 id 不起作用?

c - 访问数组索引

c - 写入syslog会导致堆分配的大小稳定增加

c - 如何在 x86 DOS 程序集中读取没有 "consuming"的键盘输入?

c++ - 3D 阵列的空间局部性?