当前位置: 技术问答>linux和unix
父进程中关闭子进程的问题??急待解决
来源: 互联网 发布时间:2016-05-15
本文导语: 各位大侠你们好: 现在我遇到了一个问题,我在父进程中,打开一个fork的子进程,现在又想要在父进程中关闭该fork子进程,并且要不影响父进程的运行。我该怎么做呢?谁能帮帮我! 这是我的代码,...
各位大侠你们好:
现在我遇到了一个问题,我在父进程中,打开一个fork的子进程,现在又想要在父进程中关闭该fork子进程,并且要不影响父进程的运行。我该怎么做呢?谁能帮帮我!
这是我的代码,不知道哪里有问题:
int main(void)
{
pid_t pid;
int i;
if( (pid = fork()) == 0)
{
while(1)
{
sleep(1);
sleep(1);
printf("ok!n");
}
}
while(1)
{
scanf("%dn",i);
printf("hellon");
kill(pid,SIGTERM);//关闭子进程fork
}
return 0;
}
这个程序关闭不了fork子进程,请问大家该怎么该呢?
现在我遇到了一个问题,我在父进程中,打开一个fork的子进程,现在又想要在父进程中关闭该fork子进程,并且要不影响父进程的运行。我该怎么做呢?谁能帮帮我!
这是我的代码,不知道哪里有问题:
int main(void)
{
pid_t pid;
int i;
if( (pid = fork()) == 0)
{
while(1)
{
sleep(1);
sleep(1);
printf("ok!n");
}
}
while(1)
{
scanf("%dn",i);
printf("hellon");
kill(pid,SIGTERM);//关闭子进程fork
}
return 0;
}
这个程序关闭不了fork子进程,请问大家该怎么该呢?
|
这样kill了子进程之后,用ps还能看到defunct的子进程,也就是一个僵尸(zombie)进程
解决的方法是在父进程处理SIGCHLD信号然后用waitpid()把子进程彻底清除
http://blog.csdn.net/hwz119/archive/2007/05/16/1612223.aspx
解决的方法是在父进程处理SIGCHLD信号然后用waitpid()把子进程彻底清除
http://blog.csdn.net/hwz119/archive/2007/05/16/1612223.aspx
|
这行还有个错误:
scanf("%dn",i); // 改成&i
scanf("%dn",i); // 改成&i
|
找一个不用的信号,将它的处理函数注册为exit_p,
exit_p ()
{
exit();
}
主进程给子进程发该信号,子进程调用exit(),安全退出
exit_p ()
{
exit();
}
主进程给子进程发该信号,子进程调用exit(),安全退出