2.5、父子进程关系以及GDB多进程调试

1.父子进程关系

父子进程之间的关系:
    区别:
        1.fork()函数的返回值不同
            父进程中:> 0 返回子进程的ID
            子进程中:= 0
        2.pcb中的一些数据
            当前的进程id pid不同
            当前的进程的父进程id ppid不同
            信号集不同
    共同点:
        某些状态下子进程刚被创建出来,还没有进行任何写的操作
            - 用户区数据相同
            - 内核区数据里面,文件描述符表相同
    
    父子进程对变量是不是共享的?
        - 刚开始的时候,是一样的,共享的。如果修改了数据,就不共享了。
        - 读时共享(子进程被创建,两个进程没做任何写的操作),写实拷贝

2.GDB多进程调试

使用 GDB 调试的时候,GDB 默认只能跟踪一个进程,可以在 fork 函数调用之前,通过指令设置 GDB 调试工具跟踪父进程或者是跟踪子进程,默认跟踪父进程。

①.设置调试进程

  • 展示调试父进程或者子进程:show follow-fork-mode [parent(默认)| child]
  • 设置调试父进程或者子进程:set follow-fork-mode [parent(默认)| child]

②.调试模式

  • 展示调试模式:show detach-on-fork [on | off]
  • 设置调试模式:set detach-on-fork [on | off]
  • 认为 on,表示调试当前进程的时候,其它的进程继续运行,如果为 off,调试当前进程的时候,其它进程被 GDB 挂起。
  • 查看调试的进程:info inferiors
  • 切换当前调试的进程:inferior id
  • 使进程脱离 GDB 调试:detach inferiors id
// 生成调试代码
gcc hello.c -o hello -g

// 运行调试代码
gdb hello
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值