继承人我的代码细目。C execv()函数是否终止子进程?
我有一个程序,分叉一个孩子(并在一个文件中注册孩子的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
}
}
的问题是,在后execv成功启动和完成(A printf语句之前返回0让我知道),我没有看到在switch语句中的命令的其余部分正在执行。我想知道execv是否有一个^ C命令,它会在完成时杀死孩子,从而永远不会完成剩下的命令。我查看了手册页,但没有发现任何有用的主题。
谢谢!
解决一个完全不同的观点:可以编写table [numP-1] - > pid而不是(* table [numP-1])。pid – 2011-03-02 19:26:02