这是我的代码的细分。
我有一个程序可以分叉一个孩子(并在文件中注册孩子的 pid),然后做自己的事情。孩子成为程序员用 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 成功启动并完成(返回 0 之前的 printf 语句让我知道),我没有看到正在执行的 switch 语句中的其余命令。我想知道 execv 中是否有一个 ^C 命令,它在完成时会杀死孩子,因此永远不会完成其余的命令。我查看了手册页,但没有发现任何关于该主题的有用信息。
谢谢!