父进程中关闭子进程的问题??急待解决

hechunhu2008 2009-01-08 11:02:34
各位大侠你们好:

现在我遇到了一个问题,我在父进程中,打开一个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("%d\n",i);

printf("hello\n");

kill(pid,SIGTERM);//关闭子进程fork
}
return 0;
}

这个程序关闭不了fork子进程,请问大家该怎么该呢?
...全文
690 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hechunhu2008 2009-01-10
  • 打赏
  • 举报
回复
谢谢大家的支持!非常感谢!
  • 打赏
  • 举报
回复
子进程是你可以控制的,信号同步,然后自己杀死。
dsadsadsa11 2009-01-09
  • 打赏
  • 举报
回复
找一个不用的信号,将它的处理函数注册为exit_p,
exit_p ()
{
exit();
}

主进程给子进程发该信号,子进程调用exit(),安全退出
快乐田伯光 2009-01-09
  • 打赏
  • 举报
回复
SIGTERM不能保证肯定可以kill掉子进程,因为子进程可以修改该信号的handler function.
[Quote=引用 3 楼 brookmill 的回复:]
我运行了一下,用SIGTERM也可以关掉子进程
[/Quote]
brookmill 2009-01-08
  • 打赏
  • 举报
回复
这样kill了子进程之后,用ps还能看到defunct的子进程,也就是一个僵尸(zombie)进程
解决的方法是在父进程处理SIGCHLD信号然后用waitpid()把子进程彻底清除
http://blog.csdn.net/hwz119/archive/2007/05/16/1612223.aspx
brookmill 2009-01-08
  • 打赏
  • 举报
回复
我运行了一下,用SIGTERM也可以关掉子进程
brookmill 2009-01-08
  • 打赏
  • 举报
回复
这行还有个错误:
scanf("%d\n",i); // 改成&i
brookmill 2009-01-08
  • 打赏
  • 举报
回复
用SIGKILL试试?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧