当前位置:  技术问答>linux和unix

大侠们来一下,真心求教个问题,急~~

    来源: 互联网  发布时间:2017-02-17

    本文导语:  代码如下: #include  #include  #include  #include  void test(pid_t pid) {   while(1) {   sleep(1);   } } void test1(pid_t pid) {   while(1) {   sleep(1);   } } int main() {   pid_t pid = 0;   int ret = 0;   pid = fork();   if (pid == ...

代码如下:
#include 
#include 
#include 
#include 

void test(pid_t pid)
{
  while(1) {
  sleep(1);
  }
}

void test1(pid_t pid)
{
  while(1) {
  sleep(1);
  }
}

int main()
{
  pid_t pid = 0;
  int ret = 0;

  pid = fork();
  if (pid == 0) {
  //setsid();
  test1(pid);
  } else if (pid > 0)
  {
  printf("This is the parent process! my id=%d ,child process id = %dn", getpid(),pid);
  test(pid);
  } else {
  printf("fork errorn");
  }

  return 1;
}

gdb对子进程进行调试:
aven@dolphin-j:~> ./ctrl_c_test &
[1] 6537
This is the parent process! my id=6537 ,child process id = 6538
aven@dolphin-j:~> gdb attach 6538
GNU gdb (GDB) SUSE (7.0-0.4.16)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
For bug reporting instructions, please see:
...
attach: No such file or directory.
Attaching to process 6538
Reading symbols from /home/aven/ctrl_c_test...done.
Reading symbols from /lib64/libc.so.6...Missing separate debuginfo for /lib64/libc.so.6
Try: zypper install -C "debuginfo(build-id)=a41ac0b0b7cd60bd57473303c2c3de08856d2e06"
(no debugging symbols found)...done.
Loaded symbols for /lib64/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
Try: zypper install -C "debuginfo(build-id)=17c088070352d83e7afc43d83756b00899fd37f0"
(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00007f9b618bf060 in __nanosleep_nocancel () from /lib64/libc.so.6
(gdb) c
Continuing.
^C^C^C^C^Z

gdb attach父进程则能够正常退出。ctrl+c只能用于前台的进程,我不知道此处是否是因为gdb attach的时候不能把子进程拿到前台来运行。

另外,在子进程中用setsid()切断和现在进程组(作业)的关系,或者新开一个session(窗口)来gdb调试子进程,都能够正常退出。什么原因?


|
啊,子进程不是已经脱离终端了么,ctrl+c是发送给前台进程组的,而且子进程不仅不再前台进程组,也不在那个会话里了,按道理说必须kill -9 去杀子进程。

|
子进程继承了父进程的进程组ID,如果终端发送的信号其父进程接收到了,子进程也应该会接收到的,理论上子进程也应该终止的
用子进程重新创建了一个会话,这个时候终端发送的信号发送给子进程,子进程就可以终止了,这么说上中情况子进程并没有收到终端发送的终止信号。    不可能啊!  矛盾啊!  是不是你的分析方法有问题。。。

    
 
 

您可能感兴趣的文章:

  • 想各位大侠求教了,为什么我的jdbc驱动不支持absolute这个方法呢?
  • 求教大侠:1.如何安装*.run格式的驱动程序。(急,送分!!)
  • 求教各位大侠 (加分)
  • 大侠们,鄙人关于gcc的语法求教?
  • VMware虚拟机上不了网,向各位大侠求教!!!!
  • 求教,急需一个在RedHat9.0下可以运行的中文平台,请哪个大侠可以推荐一个这种软件的名字
  • 求教大侠一个关于JDK1.4的正则表达式问题
  • 满分求教大侠一个简单问题
  • 求教各位linux大侠,小弟感激不禁!
  • 求教各位大侠,关于linux下pppoe拨号的问题,rp-pppoe的程序中pppoe-relay,pppoe-sniff,pppoe-server各是什么作用
  • 求教用过lua的大侠关于在C中嵌入lua脚本的连接问题?
  • fedora14 编译gnustep-base 出错,求教大侠解决办法
  • 安装g++不成功,求教各位大侠.
  • 一个关于JavaBean的问题求教各位大侠,问题能解决200分相送!在线等待
  • 高分求教!!!正方形框点击变色的源代码。。。由于本人对java一窍不通,朋友又等着救命,大侠help!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 各位大侠,本人是新手上路,经理马上让做palm,我可是从0学起!有没有那位大侠给我介绍一点经验和好的技术论坛,谢了!
  • hotenM(CMP)大侠等EJB大侠进来!小问题请教!
  • 请教大侠,怎么选开发学习板?
  • 大侠请援手:有关动态连接库。
  • 写过BBS的大侠看过来!
  • 请各位大侠推荐两本Solaris的经典书籍?
  • 各位大侠,求助Linux下关机
  • 大侠们,我是新手,请教怎么判断串口是否有连接
  • 数据恢复, 求大侠帮助, 急等!!!!!!!
  • 各位大侠,给点意见
  • JSP+数据库文本存取中的换行问题,请教大侠
  • 各位大侠:lock 命令怎么用?
  • 关于session方面的问题!哪位大侠帮帮忙!?
  • 各位大侠,那有JBuilder书down? 那有PDF格式文件的阅读器?
  • 各位大侠,还有一问题请教,如下:
  • 请“路人甲”大侠进来来看看。。。多谢了。。
  • 请各位大侠介绍几本 UNIX 的书籍
  • solaris,请大侠帮忙!
  • 哪位大侠能提供一些Motif的电子书?
  • 后退+前进=重复提交,各位大侠怎么解决呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3