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

【linux命令讲解大全】088.深入理解 shell 脚本中的 trap 命令

这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。...SIGINT 2 程序终止(interrupt)信号,在用户键入 Ctrl+C 时发出。 SIGQUIT 3 和 SIGINT 类似,但由 QUIT 字符(通常是 Ctrl /)来控制。...进程在因收到 SIGQUIT 退出时会产生 core 文件,在这个意义上类似于一个程序错误信号。 SIGFPE 8 在发生致命的算术运算错误时发出。...不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术错误。 SIGKILL 9 用来立即结束程序的运行。本信号不能被阻塞,处理和忽略。...忽略信号 如果陷阱列出的命令是空的,指定的信号接收时,将被忽略: trap '' 2 忽略多个信号: trap '' 1 2 3 15 重置陷阱 当你改变了收到信号后采取的动作,你可以省略第一个参数来重置到默认行为

22410

重学计算机组成原理(十二) - 异常和中断

你在键盘上按下一个按键,就会对应触发一个 相应的信号到达CPU里面。CPU里面某个开关的值发生了变化,也就触发了一个中断类型的异常。 3.2 陷阱(Trap) 程序员“故意“主动触发的异常。...中断异常的信号来自系统外部,而不是在程序自己执行的过程中,所以我们称之为“异步”类型的异常。 而陷阱、故障以及中止类型的异常,是在程序执行的过程中发生的,所 以我们称之为“同步“类型的异常。...而中止类型的异常,其实是在故障类型异常的一种特殊情况。当故障发生,但是我们发现没有异常处理程序能够处理这种异常的情况下,程序就不得不进入中止状态,也就是最终会退出当前的程序执行。...这里的异常可以分成中断、陷阱、故障、中止 这样四种情况。这四种异常,分别对应着I/O设备的输入、程序主动触发的状态切换、异常情况下的程序出错以及出错之后无可挽回的退出程序。...内中断 又称为异常或同步中断(产生时必须考虑与处理器时钟同步),是指 来自处理器内部的中断信号,通常是由于程序执行过程中,发现与当前指令关联的、不正常的或错误的事件。

1.5K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    保护模式下的中断和异常(上) -- 硬件原理篇

    ”,是严重的异常,比如硬件错误和系统表中包含非法值或不一致的状态等,一旦这类异常发生,程序运行便随之中止 2.1.2....异常列表 CPU 预设的异常列表 向量号 助记符 类型 描述 来源 #DE 错误 除零错误 DVI和IDIV指令 1 #DB 错误/陷阱 调试异常,用于软件调试 任何代码或数据引用 2  ...中断 NMI中断 不可屏蔽的外部中断 3 #BP 陷阱 断点 INT 3指令 4 #OF 陷阱 溢出 INTO指令 5 #BR 错误 数组越界 BOUND指令 6 #UD 错误 无效指令(没有定义的指令...) UD2指令(奔腾Pro CPU引入此指令)或任何保留的指令 7 #NM 错误 数学协处理器不存在或不可用 浮点或WAIT/FWAIT指令 8 #DF 终止 双重错误(Double Fault) 任何可能产生异常的指令...浮点或WAIT/FWAIT指令 17 #AC 错误 对齐检查 对内存中数据的引用(486CPU引入) 18 #MC 终止 机器检查(Machine Check) 错误代码和来源与型号有关(奔腾CPU引入

    1.1K20

    重学计算机组成原理(十二) - 异常和中断

    前端的应用根据这个错误代码, 在应用层面去进行错误处理 在不能处理的时候,它会根据错误代码向用户显示错误信息。...你在键盘上按下一个按键,就会对应触发一个 相应的信号到达CPU里面。CPU里面某个开关的值发生了变化,也就触发了一个中断类型的异常。 3.2 陷阱(Trap) 程序员“故意“主动触发的异常。...而陷阱、故障以及中止类型的异常,是在程序执行的过程中发生的,所 以我们称之为“同步“类型的异常。...而中止类型的异常,其实是在故障类型异常的一种特殊情况。当故障发生,但是我们发现没有异常处理程序能够处理这种异常的情况下,程序就不得不进入中止状态,也就是最终会退出当前的程序执行。...这里的异常可以分成中断、陷阱、故障、中止 这样四种情况。这四种异常,分别对应着I/O设备的输入、程序主动触发的状态切换、异常情况下的程序出错以及出错之后无可挽回的退出程序。

    97300

    例外处理

    一、例外处理Exception 代码运行可能会意外出现各种错误: • 语法错误:Syntax Error • 除以0错误:ZeroDivisionError • 列表下标越界:IndexError •...类型错误:TypeError… ?...二、例外处理Exception Handling • 错误会引起程序中止退出 • 如果希望掌控意外,就需要在可能出错误的地方设置陷阱捕捉错误:try: # 为缩进的代码设置陷阱,except: # 处理错误的代码...七、生成器函数 • 如果生成器较复杂,一行表达式无法容纳,可以定义生成器函数 • 生成器函数的定义与普通函数相同,只是将return换成 了yield • yield语句会立即中止函数执行,返回一个值...• 但在下一次迭代生成器函数的时候,会从yield语句后的语句继续执行,直到再次yield返回,或终止 • return语句也会立即中止函数执行,返回一个值 • 但它会终止函数的执行,下次调用函数会重新执行函数

    81720

    深入理解计算机系统(第三版) CSAPP 杂谈,第8章:异常控制流

    异常分为,中断(interrupt,异步),陷阱(trap),故障(fault),终止(abort)。...系统调用属于陷阱异常,用户程序想要调用服务n时,就执行处理器提供的特殊指令 syscall n。这会触发异常处理程序,程序会解析参数,并调用合适的内核程序。...终止异常是硬件问题,如 RAM 校验等不可恢复的错误,只能直接终止程序 段故障(segment fault)通常因为程序访问了受限的内存块导致的,如读未定义的虚拟内存,写只读内存等。...信号可以理解为一条消息,一个事件。 发送信号的程序可以是内核,另一个程序,自己 接收信号可以用 signal handler 来捕获这个信号(相当于嵌入式的中断函数),或者忽略。...优化编译器有可能会优化掉周期读取全局变量的代码,进而使用缓存值。vollatile 会让编译器不要缓存这个变量;并强迫代码每次引用全局变量时,强制从内存中读取。

    1.1K30

    Linux内核20-Linux内核的异常处理过程

    比如,如果一个进程尝试除零操作,CPU会产生除法错误异常,相应的异常处理程序发送SIGFPE信号给当前进程,然后由其采取必要的步骤,恢复还是中止(如果该信号没有对应的处理程序,则中止)。...还可以使用Page Fault页错误异常,用来推迟给进程分配新的页帧,直到该分配的时候。因为它的异常处理程序极其复杂,我们在后续的文章中再详细叙述这一部分的内容。...就是保存硬件错误码和异常号到当前进程描述符中,然后发送相应的信号给进程: current->thread.error_code = error_code; current->thread.trap_no...= vector; force_sig(sig_number, current); 异常处理程序终止后,当前进程接收到信号。...如果进程是在用户态,则信号交给进程自身的信号处理程序(如果存在的话);如果是在内核态,则内核通常会杀死进程。 最后异常处理程序跳转到ret_from_exception()函数地址处,从异常状态返回。

    1.6K70

    指北 | 聊聊中断机制

    操作系统的中断机制 ---- 与操作系统有关的中断,通常是指:程序在执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行, 转去执行相应的事件处理程序,待处理完成 后再返回原程序被中断处或调度其他程序执行的过程...包括错误情况引起的故障,如除零算数错误,缺页异常;也包括不可恢复的致命错误导致的终止,通常是一些硬件错误。...异常的处理 对于故障的处理,根据故障是否能够被恢复,故障处理程序要么重新执行引起故障的指令,要么终止。 ? 对于终止的处理,处理程序将控制返回给一个abort例程,该例程会终止这个应用程序。...系统调用的处理 这种有意的异常,称为陷阱处理。处理完成后陷阱程序会将控制返回给应用程序控制流的下一条指令。 ? 总结一下,操作系统的中断类别行为如下: ? 好了,大头总算完了。...它们同样很大,我们把他们分别分为Task4,Task5和Task6,Task7,同样丢进线程池中处理。 ?

    67710

    unix环境高级编程(中)-进程篇

    2.2 异常终止 调用abort 接到一个信号并终止 最后一个线程堆取消请求做出相应 2.3 终止处理程序 终止处理程序由exit自动调用,无需手动调用 注册终止处理程序的方法:atexit,参数为函数地址...取得终止状态 当一个进程中止时,内核就向其父进程发送SIGCHLD信号(异步信号) 父进程可以选择忽略或提供信号处理程序 如果父进程在子进程之前终止,子进程的父进程都变为init进程。...如果捕捉到信号而且从函数返回,则suspend返回,且将信号屏蔽字还原 12. abort 作用:使异常程序中止 说明:发生SIGABORT信号给进程,进程不能忽略此信号。...每个线程内部是同步的。 要实现内存和文件描述符的共享,使用多进程是很复杂的。...因此遇到信号时行为与其他系统不同 6.

    2.3K42

    Kubernetes 中容器的退出状态码参考指南

    以下是容器使用的最常见的退出码: 退出码 名称 含义 0 正常退出 开发者用来表明容器是正常退出 1 应用错误 容器因应用程序错误或镜像规范中的错误引用而停止 125 容器未能运行 docker run...之间的整数) 134 异常终止 (SIGABRT) 容器使用 abort() 函数自行中止 137 立即终止 (SIGKILL) 容器被操作系统通过 SIGKILL 信号终止 139 分段错误 (SIGSEGV...如果断言为假,则该过程中止。 如果容器以退出码 134 终止怎么办?...检查容器日志,查看哪个库触发了 SIGABRT 信号; 检查中止进程是否是预期内的(例如,因为库处于调试模式),如果不是,则对库进行故障排除,并修改以避免中止容器。...+0800 Ready: True Restart Count: 1 使用kubectl提供的退出代码解决问题: 如果退出代码为 0:容器正常退出,无需排查 如果退出代码在 1-128 之间:容器因内部错误而终止

    32810

    5-中断和异常

    ,并且中断是唯一的实现方式 核心态到用户态的切换只需要执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态”即可 中断的分类 内中断 也称为异常,例外,陷入 信号来源:CPU内部,与当前执行的指令有关...内中断还细分为 自愿中断:指令中断,如系统调用时的访管指令(陷入指令,trap指令) 强迫中断:硬件故障(如缺页中断),软件中断(如除0) 内中断另一种分类方式: 陷阱,陷入(trap):有意而为之的异常...,如系统调用 故障(fault):由错误条件引起的,可能被故障处理程序修复,如缺页 终止(abort):不可恢复的致命错误造成的结果,终止处理程序不再将控制返回给引发终止的应用程序,如整数除0操作 外中断...也称为中断(狭义上的中断) 信号来源:CPU内部,与当前执行的指令无关 外中断还可以分为 外设请求:如I/O操作完成发出的中断信号 人工干预:如用户强行停止一个进程 外中断处理过程 CPU在用户态下逐条执行指令...,在每条指令执行结束后进行检查,检查当前是否有外部中断信号 如果检测到外部中断信号在,则需要保护被中断进程的CPU环境(如程序状态字PSW,程序计数器PC,各种通用寄存器) 根据中断信号类型转入响应的中断处理程序

    47310

    2020-09-16:谈谈TCP的控制位?

    在数据传输流中,主机正在向远程机器上运行的应用程序发送数据,可以使用紧急指针。如果出现问题,主机需要中止数据传输,并在另一端停止数据处理。...在正常情况下,中止信号将在远程机器发送和排队,直到所有先前发送的数据都被处理,但是在这种情况下,我们需要立即处理中止信号。...通过将中止信号的段紧急指针标志设置为“1”,远程机器将不会等待所有排队的数据被处理,然后执行中止。相反,它会给出特定的段优先级,立即处理它,并停止进一步的数据处理。...3 PUSH 在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。 4 复位标志RST 这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包。...6 FIN断开标志 带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

    70610

    SIGSEGV:Linux 容器中的分段错误(退出代码 139)

    SIGSEGV 由以下代码表示: 在 Unix/Linux 中,SIGSEGV 是操作系统信号 11 在 Docker 容器中,当 Docker 容器由于 SIGSEGV 错误而终止时,它会抛出退出码...SIGABRT(信号中止)是由进程本身触发的信号。它异常终止进程,关闭并刷新打开的流。一旦被触发,就不能被进程阻塞(类似于SIGKILL,不同的是SIGKILL是由操作系统触发的)。...然后进程可以通过触发 SIGABRT 自行中止 调用用于调试的 assert() 宏,如果断言为假,则使用 SIGABRT 中止程序。...处理 SIGSEGV 错误 在基于 Unix 的操作系统上,默认情况下,SIGSEGV 信号将导致违规进程异常终止。...然后容器终止,Kubernetes 检测到这一点,并可能根据 pod 配置尝试重新启动它。 当 Docker 容器被 SIGSEGV 信号终止时,它会抛出退出码 139。

    8.3K10

    【linux】进程创建与进程终止

    信号 致命信号: SIGSEGV(段错误信号):最常见的程序崩溃原因,通常是由于访问违法的内存地址。...SIGABRT(中止信号):通常是由于程序内部发生严重错误或调用 abort() 函数而触发。 SIGFPE(浮点异常信号):执行了一个无效的算术运算,比如除以零。...SIGKILL:无条件终止程序运行的信号,无法捕获或忽略。 SIGTERM:请求终止程序的信号,比 SIGKILL 更温和,允许程序进行清理(关闭文件、释放资源等)操作后退出。...进程出异常,本质是因为进程收到了OS发给进程的信号! 段错误,OS提前终止进程 我们可以看进程退出的时候,退出信号是多少,就可以判断我的进程为什么异常了! ! !...立即终止:提供一种确保程序能迅速终止的方式,通常用于子进程退出或者在错误处理中需要立即终止程序时使用。

    10110

    一文讲透计算机的“中断”

    注:INTR和NMI都是CPU的引脚 2 内部中断(软中断,异常) 1、陷阱:是一种有意的,预先安排的异常事件,一般是在编写程序时故意设下的陷阱指令,而后执行到陷阱指令后,CPU将会调用特定程序进行相应的处理...如系统调用,程序调试功能等。 尽管我们平时写程序时似乎并没有设下陷阱,那是因为平常所用的高级语言对底层的指令进行了太多层的抽象封装,已看不到底层的实现,但其实是存在的。...3、终止:执行指令的过程中发生了致命错误,不可修复,程序无法继续运行,只能终止,通常会是一些硬件的错误。...终止处理程序不会将控制返回给原程序,而是直接终止原程序 中断描述符表 中断描述符表类似全局描述附表,表内存放的描述符,与GDT不同的是IDT内可以存放4种描述符:任务门描述符,陷阱门描述符,调用门描述符...6 中断返回——出栈 中断返回就是出栈的过程,将第三步保护现场压入栈中的信息弹出。 1、有错误码弹出错误码。

    1.3K21

    中断和异常概念详解

    中断 CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行...我们也采用这种分类,当然有时我们也用术语“中断信号”指这两种类型。 异常是由程序的错误产生的,或是由内核必须处理的异常条件产生的。...第一种情况下,内核通过发送一个每个Unix程序员都熟悉的信号来处理异常。...作为一个内核控制路径,中断处理程序比一个进程要“轻”(light)(中断的上下文很少,建立或终止中断处理需要的时间很少)。...故障(fault):通常可以纠正; 陷阱(trap):在陷阱指令执行后立刻报告; 异常终止(abort):发生了一个严重的错误; 编程异常 在编程者发出请求时发生。

    1.6K10

    Golang异常和错误处理的优雅方式

    如果不对异常做处理,可能导致程序终止程序或者抛出异常信息,导致程序无法正常运行。不管是在程序编译或者运行时,都需要对异常进行严格处理。...panic 可以直接从代码初始化:当错误条件(我们所测试的代码)很严苛且不可恢复,程序不能继续运行时,可以使用 panic 函数产生一个中止程序的运行时错误。...panic 接收一个做任意类型的参数,通常是字符串,在程序死亡时被打印出来。Go 运行时负责中止程序并给出调试信息。 在多层嵌套的函数调用中调用 panic,可以马上中止当前函数的执行。...正如名字一样,这个(recover)内建函数被用于从 panic 或 错误场景中恢复:让程序可以从 panicking 重新获得控制权,停止终止过程进而恢复正常执行。...这样向上冒泡直到最顶层,并执行(每层的) defer,在栈顶处程序崩溃,并在命令行中用传给 panic 的值报告错误情况:这个终止过程就是 panicking。

    2K20

    容器和 Kubernetes 中的退出码完整指南

    )容器使用 abort() 函数自行中止137立即终止 (SIGKILL)容器被操作系统通过 SIGKILL 信号终止139分段错误 (SIGSEGV)容器试图访问未分配给它的内存并被终止143优雅终止...退出码 1:应用错误 退出代码 1 表示容器由于以下原因之一停止: 应用程序错误:这可能是容器运行的代码中的简单编程错误,例如“除以零”,也可能是与运行时环境相关的高级错误,例如 Java、Python...如果您找不到不正确的文件引用,请检查容器日志以查找应用程序错误,并调试导致错误的库。 退出码 125:容器未能运行 退出码 125 表示该命令用于运行容器。...如果断言为假,则该过程中止。 如果容器以退出码 134 终止怎么办?...检查容器日志,查看哪个库触发了 SIGABRT 信号; 检查中止进程是否是预期内的(例如,因为库处于调试模式),如果不是,则对库进行故障排除,并修改以避免中止容器。

    5.6K20

    Go中的错误和异常处理最佳实践

    如果不对异常做处理,可能导致程序终止程序或者抛出异常信息,导致程序无法正常运行。不管是在程序编译或者运行时,都需要对异常进行严格处理。...panic 可以直接从代码初始化:当错误条件(我们所测试的代码)很严苛且不可恢复,程序不能继续运行时,可以使用 panic 函数产生一个中止程序的运行时错误。...panic 接收一个做任意类型的参数,通常是字符串,在程序死亡时被打印出来。Go 运行时负责中止程序并给出调试信息。 在多层嵌套的函数调用中调用 panic,可以马上中止当前函数的执行。...正如名字一样,这个(recover)内建函数被用于从 panic 或 错误场景中恢复:让程序可以从 panicking 重新获得控制权,停止终止过程进而恢复正常执行。...这样向上冒泡直到最顶层,并执行(每层的) defer,在栈顶处程序崩溃,并在命令行中用传给 panic 的值报告错误情况:这个终止过程就是 panicking。

    96310
    领券