evenaye
驱动牛犊
驱动牛犊
  • 注册日期2007-04-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分210分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:2184回复:4

请教偶这个demo程序如何结束子进程阿

楼主#
更多 发布于:2007-06-22 15:11
demo程序中:
父进程打开设备,然后创建子进程
子进程read设备,如果没有中断发生,read一直sleep(驱动中实现))
父进程在子进程结束前什么也不做,当子进程结束后,父进程关闭设备
程序大概就是这样,请问有什么办法能让子进程终止阿(无中断状态下)?
尝试过SIGKILL、SIGTERM,都不行,郁闷了.....
代码大意如下:

SIGINT的处理函数catch_int中仅仅让全局变量exit_flag=1

fd=open();//代开设备

signal(SIGINT, catch_int);
if((pid=fork())<0)

 {

   printf("can't create child!\n");

   exit(1);

}
 else if(pid==0)

{

   signal(SIGINT,SIG_DFL);

   while(exit_flag==0)

  {

     read();//如果没有中断发生,read调用会一直sleep(驱动中实现)

  }        

}
 else

{
printf("child pid:%d\n",pid);

while(exit_flag==0) ;                
kill(pid,SIGKILL);//问题就在这里,到底该如何结束子进程呢?
waitpid(-1,&status,0);

}    
close(fd);// 关闭设备                  
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2007-06-22 16:25
发送消息给子进程,子进程处理该消息就是exit(0).看看是否成功。
走走看看开源好 Solaris vs Linux
shuizhumuyu
驱动牛犊
驱动牛犊
  • 注册日期2007-07-23
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-26 22:02
驱动中的sleep应该是可中断的
kellyp
驱动牛犊
驱动牛犊
  • 注册日期2006-11-22
  • 最后登录2007-09-08
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-08-24 21:59
在主程序里面 等待子程序结束信号发生
kellyp
驱动牛犊
驱动牛犊
  • 注册日期2006-11-22
  • 最后登录2007-09-08
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-08-24 22:07
简单实例
主程序里面 调用 等SIGCHLD 信号发生
signal(SIGCHLD,sigchl_handler);

在子程序里面调用exit(0);结束子程序
 在子程序结束时会传递给主程序SIGCHLD的信号。
游客

返回顶部