execvp启动子进程后,子进程无法kill父进程
我用fork创建一个子进程,然后用execvp执行新程序,问题是:
1、子进程中调用kill(getppid(), 9); 无法将父进程杀死
2、子进程的输出看不到
请问这是为什么,execvp执行后对子进程有哪些影响?
父进程代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
pid_t pid;
int i;
while(1)
{
if((pid = fork()) < 0)
{
printf("fork error\n");
exit(0);
}
else if(pid == 0)
{
printf("\n ----------------- \n");
execvp("child", argv+1);
printf(" ========== \n");
exit(0);
}
else
{
int status;
wait(&status);
}
}
return 0;
}
子进程代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
int main(int argc, char *argv[])
{
printf("before kill\n");
kill(getppid(), 9);
printf("after kill \n");
return 0;
}
------解决方案--------------------kill(getppid(), 9);的返回值是什么? -1时errno是什么。
你将父进程的wait(&status)改为sleep(100),然后是什么结果。
等等。
------解决方案--------------------还有父进程for(;;){} 代替wait的情形,等等。
然后才能得出execvp启动子进程后,子进程无法kill父进程的结论