首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

execvp启动子进程后,子进程没法kill父进程

2013-03-25 
execvp启动子进程后,子进程无法kill父进程我用fork创建一个子进程,然后用execvp执行新程序,问题是:1、子进

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

热点排行