日期:2014-05-16  浏览次数:20798 次

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父进程的结论