当前位置: 技术问答>linux和unix
关于子进程杀死父进程的问题
来源: 互联网 发布时间:2016-02-29
本文导语: 现在我需要在子进程中杀死父进程,但是子进程仍然要运行,我试了两种方法,但是都没有达到预期的效果,结果是父进程和子进程,都被杀死了。请高手指点问题在哪里,或者有什么其他的方法,谢谢。 方法1: ...
现在我需要在子进程中杀死父进程,但是子进程仍然要运行,我试了两种方法,但是都没有达到预期的效果,结果是父进程和子进程,都被杀死了。请高手指点问题在哪里,或者有什么其他的方法,谢谢。
方法1:
因为有文章介绍说,system调用,本身就创建了一个子进程。于是我写了一个脚本,将父进程的进程号做参数,传进去,脚本这样写的
sleep 20
kill $1
........
getty 115200 tty0
......
在运行脚本后,我ps,看到系统中有脚本的进程,sleep 20 就是为了看看是否有脚本的进程。等大概20秒后,执行kill之后,发现父进程杀死了,但是脚本的进程也被杀死了。这是为什么?
方法2:
方法一出了问题,我就认为是不是要自己调用fork()来创建子进程,于是我就写下面的函数
int main(viod)
{
int fd;
......
fd=fork();
if(fd==0)
{
调用system()杀死父进程。
while(1);
}
}
本来我没有加while(1),,因为我在看到杀死父进程后,自子进程也被杀死了,我觉得可能是子进程执行完了,退出了,所以我加一个死循环,子进程永远不会退出,但是结果,子进程仍然是被杀死了。
我看过说killall会杀死父进程和他的所有子进程,所以我特意用kill,但是为什么还是不行,高手指点阿。
方法1:
因为有文章介绍说,system调用,本身就创建了一个子进程。于是我写了一个脚本,将父进程的进程号做参数,传进去,脚本这样写的
sleep 20
kill $1
........
getty 115200 tty0
......
在运行脚本后,我ps,看到系统中有脚本的进程,sleep 20 就是为了看看是否有脚本的进程。等大概20秒后,执行kill之后,发现父进程杀死了,但是脚本的进程也被杀死了。这是为什么?
方法2:
方法一出了问题,我就认为是不是要自己调用fork()来创建子进程,于是我就写下面的函数
int main(viod)
{
int fd;
......
fd=fork();
if(fd==0)
{
调用system()杀死父进程。
while(1);
}
}
本来我没有加while(1),,因为我在看到杀死父进程后,自子进程也被杀死了,我觉得可能是子进程执行完了,退出了,所以我加一个死循环,子进程永远不会退出,但是结果,子进程仍然是被杀死了。
我看过说killall会杀死父进程和他的所有子进程,所以我特意用kill,但是为什么还是不行,高手指点阿。
|
你的system执行的命令是怎么样的?
我用你的第二种方案写了一个程序,如下,
int main(argn,argc,argv)
int argn;
char *argc[],*argv[];
{
pid_t pid,ppid;
ppid = getpid();
if ((pid = fork())
我用你的第二种方案写了一个程序,如下,
int main(argn,argc,argv)
int argn;
char *argc[],*argv[];
{
pid_t pid,ppid;
ppid = getpid();
if ((pid = fork())