首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么gdb终端的Ctrl-c不向gdb进程发送STOP信号?

gdb是一个功能强大的调试器,用于调试和分析程序。当在gdb终端中按下Ctrl-c时,它不会向gdb进程发送STOP信号的原因是,Ctrl-c在终端中被解释为中断当前正在运行的进程,而不是向gdb进程发送信号。

在gdb中,Ctrl-c被用作中断正在调试的程序,而不是中断gdb本身。当你在gdb中运行程序时,Ctrl-c会中断正在运行的程序,使你能够检查程序的状态、变量的值以及执行堆栈等信息。这对于调试程序非常有用,因为它允许你在程序执行时停下来并检查其状态。

然而,如果你希望中断gdb进程本身,你可以使用Ctrl-\来发送QUIT信号。这将导致gdb进程终止并退出。

总结起来,Ctrl-c在gdb终端中不会向gdb进程发送STOP信号,而是用于中断正在调试的程序。如果你想中断gdb进程本身,可以使用Ctrl-\来发送QUIT信号。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(ECS):https://cloud.tencent.com/product/cvm
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 人工智能机器学习平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云存储(COS):https://cloud.tencent.com/product/cos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux 中前台进程转后台,并重定向输出

关掉终端窗口会终止此进程,若想实现类似 nohup [command] & 效果,此时需要使用 disown %n 将后台运行这个进程与当前 shell 分离: $ disown %1 先查找一下这个进程...00:00:00 sleep 5 ec2-user 26698 26320 0 14:53 pts/0 00:00:00 grep --color=auto 24863 虽然进程依然在运行,但新打开终端中已经无法看到进程输出内容了...使用 gdb 命令附加到该进程gdb 是一个用于调试程序工具,也可以用于向运行中进程发送信号。...在 gdb 命令提示符下,执行以下命令来重定向进程标准输出: $ gdb -p 24863 ......请注意:此方法对某些进程可能无效,因为有些进程会在启动时检查其输出是否已被重定向。此外,由于 gdb 是一个用于调试工具,执行此操作可能会对进程运行产生一些影响。

14810

原来gdb底层调试原理这么简单

在最后一行可以看到光标在闪烁,这是 gdb 程序在等着我们给他下达调试命令呢。当上面这个黑乎乎终端窗口在执行 gdb ./test 时候,在操作系统里发生了很多复杂事情。...而且 gdb 进程接管了 test 进程所有信号,也就是说系统向 test 进程发送所有信号,都被 gdb 进程接收到,这样一来,test 进程执行就被 gdb 控制了,从而达到调试目的。...相当于这样一种情况:如果没有 gdb 调试,操作系统与目标进程之间是直接交互;如果用 gdb 来调试程序,那么操作系统发送给目标进程信号就会被 gdb 截获,gdb 根据信号属性来决定:在继续运行目标程序时是否把当前截获信号转交给...此时,gdb 进程发送 SIGSTOP 信号给子进程B,子进程B接收到 SIGSTOP 信号后,就会暂停执行进入 TASK_STOPED 状态,表示自己准备好被调试了。 ?...所以,不论是调试一个新程序,还是调试一个已经执行服务程序,通过 ptrace 系统调用,最终结果都是:gdb 程序是父进程,被调试程序是子进程,子进程所有信号都被父进程 gdb 来接管,并且父进程

1.6K40

用图文带你彻底弄懂GDB调试原理

在最后一行可以看到光标在闪烁,这是gdb程序在等着我们给它下达调试命令呢。 当上面这个黑乎乎终端窗口在执行gdb ....而且gdb进程接管了test进程所有信号,也就是说系统向test进程发送所有信号,都被gdb进程接收到,这样一来,test进程执行就被gdb控制了,从而达到调试目的。...也就是说,如果没有gdb调试,操作系统与目标进程之间是直接交互;如果使用gdb来调试程序,那么操作系统发送给目标进程信号就会被gdb截获,gdb根据信号属性来决定:在继续运行目标程序时是否把当前截获信号转交给目标程序...此时gdb进程发送SIGSTO信号给子进程B,子进程B接收到SIGSTOP信号后,就会暂停执行进入TASK_STOPED状态,表示自己准备好被调试了。 ?...所以,不论是调试一个新程序,还是调试一个已经处于执行中状态服务程序,通过ptrace系统调用,最终结果都是:gdb程序是父进程,被调试程序是子进程,子进程所有信号都被父进程gdb来接管,并且父进程

4.8K53

【Linux】进程信号(中)

1 ---- 操作系统发现状态寄存器标记位为1,即识别到硬件异常,从而会立马向目标进程发送信号 而该信号为:Floating point exception 浮点数异常 ---- FPE为结尾正好为...,操作系统会找到对应目标进程PCB,发送对应信号,从而终止进程 ---- Segmentation fault对应11号信号 验证为11号信号 执行可执行程序后,会一直无线循环打印 由于...通过复制SSH渠道,创建终端2 ---- 2号信号对应Term ,终止进程 ---- 在终端1中运行可执行程序,在终端2中发送2号信号干掉进程 ---- 当干掉进程后,并没有发现以pid结尾文件...说明使用Term类型信号,干掉进程后,不发生核心转储 ---- 8号信号 Core,浮点数异常 在终端1中运行可执行程序,在终端2中发送8号信号干掉进程,并出现core dump即核心转储...,有gdb自动定位,事后调试 ---- 核心转储为什么一般都是被关闭

18330

GDB调试程序(二)

cd 相当于shellcd命令。     pwd 显示当前所在目录。 4、程序输入输出。     info terminal 显示你程序用到终端模式。    ...如:run > outfile     tty命令可以指写输入输出终端设备。...2、先用gdb 关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程PID。并用detach来取消挂接进程。...暂停 / 恢复程序运行 ————————— 调试程序中,暂停程序运行是必须GDB可以方便地暂停程序运行。你可以设置程序在哪行停住,在什么条件下停住,在收到什么信号时停往等等。...以便于你查看运行时变量,以及运行时流程。 当进程gdb停住时,你可以使用info program 来查看程序是否在运行,进程号,被暂停原因。

98120

gdb 调试笔记

,是否在运行,程序名,为什么停止 info stack 查看栈信息 info r 查看寄存器 八、调试特定场景 (1)调试多线程 info threads thread 2 切换到线程2 thread...,而父进程inferior仍然保留,当前保留inferior程序状态是没有执行。...same是保持在原来inferior,gdb默认是same模式 set schedule‐multiple on 所有进程同时运行,detach‐on‐fork开启调试一个进程时,其他进程挂起 bt...显示所有参数 set print frame‐arguments all (3)调试信号 info handle 查看各种信号设置,设置包括如下: print 对信号量进行通知 noprint 对信号量不打印信息...,如果有信号量干扰,可以用handle xxx noprint将其屏蔽 stop 中断执行 nostop 不中断执行 pass 允许程序接管信号量 nopass 不允许程序接收信号量 handle SIGCONT

86000

10-3 信号

kill 命令准确地说并不是杀死进程,而是给进程发送信号信号是操作系统和程序间通信多种方式之一,在使用 Ctrl-C 键 和 Ctrl-Z 键 时已经见识过信号作用。...当终端接收到其中一个输入时,它将发送信号到前台进程。...在按下Ctrl-C情况下,它将发送一个称为 INT(中断,Interrupt)信号; 在按下Ctrl-Z 键 情况下,它将发送一个称为 TSTP(终端暂停,Terminal Stop信号...③ -l:指定信号名称列表。 返回值: ''' ① 常用信号及示例 信号编号 信号名 含义 1 HUP 挂起信号。 2 INT 中断信号。执行效果和在终端按下 Ctrl-C效果一样。...恢复之前接受了 STOP 信号进程。 19 STOP 暂停信号。该信号将使进程暂停,而不是终止。和 KILL 信号 类似,该信号不会被发送给目标进程,因此它不能被忽略。

54830

GDB多线程调试分析

0x03:GDB调试多线程 调试进程建立具体流程下图所示: ?...在创建好被调试进程之后,gdb通过ptrace(PTRACE_SETOPTIONS)设置PTRACE_O_TRACECLONE,设置过后,当被调试进程创建线程时候,就会给自己发送一个SIGTRAP信号...,让被调试进程进入stop状态,使得gdb能够捕捉到这些事件,获取tid添加到lwp_list中后,gdb会让程序继续运行,直到被调试程序发生一些需要通知gdb用户事件,比如触发了用户设置断点,下面是流程图...在被调试进程加载libpthread库时,会为该进程创建这么一个struct thread_db_info记录该进程要使用到libthread_db提供调试接口。...线程进入stop状态 gdb 通过waitpid()监测到被调试进程状态改变,分析子进程发生事件,判断为bp_thread_event断点触发。

1.4K10

Tomcat进程意外退出,元凶居然是他...

这种情况下,如果用户直接关闭ssh终端窗口(用鼠标或快捷键),则java进程也会退出。而如果先ctrl-c终止test.sh进程,然后再关闭ssh终端的话,则java进程不会退出。...11 ] -> [ 0 20615 test.sh ] 注pid 11是events进程 b) 关闭ssh终端窗口时,sshd向下游进程发送SIGHUP, 为何java进程也会收到?...因为默认如果采用父进程进程组ID,父进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程组中每个成员,假设后台进程也是父进程成员,因为作业控制需要不能忽略SIGINT,你在终端随意...回到tomcat例子,catalina.sh脚本通过start参数启动时候,就是以非交互方式后台启动,java进程也被shell设置了忽略SIGINT信号,因此在ctrl-c结束test.sh进程时...bash也不会再向它发送信号

3.9K10

吃土记之GDB调试原理

老王:gdb调试呀 小王:gdb 为什么可以非侵入调试进程呀。 老王:这个我没想过。。。平时不考虑这个问题 gdb基本上大家都在用,你有没有想过它实现原理是什么?...为什么它可以控制程序执行、中断、访问内存甚至直接使程序流程改变? 在使用gdb调试程序时,程序进程状态是”T”,但又似乎并非接到了SIGSTOP信号, 那么这个”T”是什么呢?...; // 等待子进程发送一个 SIGCHLD 信号 ptrace(PTRACE_GETREGS, child, NULL, ®s); // 获取子进程各个寄存器值 printf...PTRACE 状态时,执行 exec() 函数后便会发送一个 SIGTRAP 信号给当前进程。...发送 SIGCHLD 信号给父进程。让出 CPU 执行权限,使 CPU 执行其他进程

95020

关于Segmentation fault (core dumped)几个简单问题

unlimited 发生core dump之后,用gdb进行查看core文件内容, 以定位文件中引发core dump行: gdb [exec file] [core file] 如: gdb ....SIGHUP   终止进程   终端线路挂断 SIGINT   终止进程   中断进程 SIGQUIT   建立CORE文件终止进程,并且生成core文件 SIGILL   建立CORE文件   非法指令...   非终端停止信号 SIGTSTP   停止进程   终端停止信号 SIGCONT   忽略信号   继续执行一个停止进程 SIGURG   忽略信号   I/O紧急信号 SIGIO   忽略信号...   描述符上可以进行I/O SIGCHLD   忽略信号   当子进程停止或退出时通知父进程 SIGTTOU   停止进程   后台进程终端 SIGTTIN   停止进程   后台进程终端 SIGXGPU...   终止进程   用户定义信号1 SIGUSR2   终止进程   用户定义信号2 SIGVTALRM   终止进程   虚拟计时器到 把可能信号都设置上句柄,看是那种情况。

9.9K30

Tomcat 进程意外突崩,元凶居然是它...

这种情况下,如果用户直接关闭ssh终端窗口(用鼠标或快捷键),则java进程也会退出。而如果先ctrl-c终止test.sh进程,然后再关闭ssh终端的话,则java进程不会退出。...11 ] -> [ 0 20615 test.sh ] 注pid 11是events进程 b) 关闭ssh终端窗口时,sshd向下游进程发送SIGHUP, 为何java进程也会收到?...因为默认如果采用父进程进程组ID,父进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程组中每个成员,假设后台进程也是父进程成员,因为作业控制需要不能忽略SIGINT,你在终端随意...回到tomcat例子,catalina.sh脚本通过start参数启动时候,就是以非交互方式后台启动,java进程也被shell设置了忽略SIGINT信号,因此在ctrl-c结束test.sh进程时...bash也不会再向它发送信号

90810

内核转储设置

默认操作主要包括:终止进程(Term)、忽略该信号(Ing)、终止进程并发生核心转储(Core)、暂停进程Stop)、继续运行被暂停进程(Cont)。...size limit exceeded (4.2BSD) 超出文件大小限制 这就是为什么我们使用 Ctrl+z 来挂起一个进程或者 Ctrl+C 结束一个进程均不会产生 core dump。...因为前者会向进程发出 SIGTSTP 信号,该信号默认操作为暂停进程Stop Process);后者会向进程发出SIGINT 信号,该信号默认操作为终止进程(Terminate Process)。...) 可以看到,在GDB启动后,已经打印出test.c第6行收到了SIGSEGV信号,产生了段错误。...格式符 说明 %% % 字符本身 %p 被转储进程进程 ID(PID) %u 被转储进程真实用户 ID(real UID) %g 被转储进程真实组 ID(real GID) %s 引发转储信号编号

1.7K40

GDB那些奇淫技巧

不过我们进程是没有符号,所以break main并没有卵用。 现在已经有了让 gdb 跟着子进程方法,只不过问题是无法把断点打到子进程上,因为子进程还没有启动,那么用硬件断点可不可以?...detach-on-fork on是为了在 fork 之后断开父进程,避免 gdb 退出时把父进程杀死,并不是这节重点。 其中时序非常重要。...next {count} 单步多少次 CTRL+C 发送 SIGINT 信号,中止当前运行程序 attach {process-id} 链接上当前正在运行进程,开始调试 detach 断开进程链接...(非符号表) core-file {core} 加载 core 用于分析 信号控制 命令 含义 备注 info signals 打印信号设置 handle {signo} {actions} 设置信号调试行为...handle INT print 信号发生时打印信息 handle INT noprint 信号发生时不打印信息 handle INT stop 信号发生时中止被调试程序 handle INT

1.1K20

GDB调试-从入门实践到原理

任何信号(除了 SIGKILL)都会暂停子进程,接着阻塞于 wait() 等待进程被唤醒。...可同时向子进程交付指定信号 调试原理 运行并调试新进程 运行并调试新进程,步骤如下: 运行gdb exe 输入run命令,gdb执行以下操作: 通过fork()系统调用创建一个新进程 在新创建进程中执行...断点原理 实现原理 当我们通过b或者break设置断点时候,就是在指定位置插入断点指令,当被调试程序运行到断点时候,产生SIGTRAP信号。该信号gdb捕获并 进行断点命中判断。...当执行到int 3时,发生软中断,内核会向子进程发送SIGTRAP信号。当然,这个信号会转发给父进程。然后用保存指令替换int 3并等待操作恢复。 命中判断 gdb将所有断点位置存储在一个链表中。...当程序到达这个地址时,不是发出int 3信号,而是进行比较。特定寄存器内容和某个地址,然后决定是否发送int 3。因此,当你断点位置被程序频繁“通过”时,尽量使用硬件断点,这将有助于提高性能。

2.3K30

实用 Linux 命令行使用技巧集锦

&,Ctrl-Z,Ctrl-C,jobs,fg,bg,kill 等。...可以实现并行执行任务,并可以分割输入文件, 指定多个节点同时运行命令等功能.详细功能可以参考这个链接. pstree -p 打用进程得力工具 pgrep,pkill 使用名字查找进程,或者直接向指定名字进程发送信号...—了解用户能发送进程一些信号。比如 kill -STOP [pid] ,让pid进程挂起。...cron 可以帮助你制定一些定时执行计划任务。 Ctrl-S Ctrl-C 将一不小心需要大量输出文本时,依次输入这两个操作,比单纯频繁按Ctrl-C能更快让程序终止。...比如 -c选项可以做profiling;-p选项可以挂到某个指定进程上。 ldd 检查共享库情况 gdb 了解如何利用GDB连接到一个正在运行进程,并且得到其stack trace。

1.4K80

nohup、&、setsid、fork和fg、bg究竟有啥区别?

以“&”方式可以将一个前台进程以后台方式运行,但是如果它是一个终端job,则如果向终端收到SIGHUP信号终端也会向它所有job发送SIGHUP,这样以“&”方式运行进程则会因为收到SIGHUP...当用户注销(logout)或者网络断开时,终端会收到 SIGHUP(hangup)信号从而关闭其所有子进程。...进程收到这两个信号后,都进入STOP状态,使用ps aux看到状态值为“T”,可以通过发送信号SIGCONT重新回到运行状态。...一些root启动进程,这个时候只开放gdb等少数一些命令给非root用户。...这个时候按“ctrl+z”,也就是发送SIGTTSTP信号给程序x进程进程会被stop,并且进入后台方式: [1]+  Stopped

2K20

第十一章:进程

在使用 Ctrl-c 和 Ctrl-z 过程中我们已经看到信号实际用法。当终端接受了其中一个按键组合后,它会给在前端运行程序发送一个信号。...在使用 Ctrl-c 情况下,会发送一个叫做 INT(中断)信号;当使用Ctrl-z 时,则发送一个叫做 TSTP(终端停止)信号。程序,相应地,倾听信号到来,当程序接到信号之后,则做出响应。...Apache 网络服务器守护进程就是一个例子。 2 INT 中断。实现和 Ctrl-c 一样功能,由终端发送。通常,它会终止一个程序。 9 KILL 杀死。这个信号很特别。...这是 kill 命令发送默认信号。如果程序仍然“活着”,可以接受信号,那么这个它会终止。 18 CONT 继续。在一个停止信号后,这个信号会恢复进程运行。 19 STOP 停止。...不像 STOP 信号,TSTP 信号由目标进程接收,且可能被忽略。 28 WINCH 改变窗口大小。当改变窗口大小时,系统会发送这个信号

34300

试一试这百个超有用Linux命令行使用技巧

&,Ctrl-Z,Ctrl-C,jobs,fg,bg,kill等。...可以实现并行执行任务,并可以分割输入文件, 指定多个节点同时运行命令等功能. pstree -p 打用进程得力工具 pgrep,pkill 使用名字查找进程,或者直接向指定名字进程发送信号。...了解用户能发送进程一些信号。比如kill -STOP [pid],让pid进程挂起。 nohup,disown,screen, tmux 当你需要将进程永远处在后台运行是,这两个命令很有用。...cron 可以帮助你制定一些定时执行计划任务。 Ctrl-S Ctrl-C 将一不小心需要大量输出文本时,依次输入这两个操作, 比单纯频繁按Ctrl-C能更快让程序终止。...比如 -c选项可以做profiling; -p选项可以挂到某个指定进程上。 ldd 检查共享库情况 gdb 了解如何利用GDB连接到一个正在运行进程,并且得到其stack trace。

98870
领券