Linux进程是否可以通过致命信号或调用“ exit(2)”以外的其他机制来消亡?

时间:2019-03-04 22:15:15

标签: linux linux-kernel

据我所知,Linux内核清理进程条目的唯一方法是该进程执行exit(2) syscall还是无法处理致命信号(例如SIGSEGVSIGABRTSIGTERMSIGKILL等)。我知道SIGKILL无法处理,因此甚至没有真正“交付”到流程中。.这有点符合我在这里的想法。

假设内核本身保持完好和有效(对硬件故障/设备关闭/紧急情况等不感兴趣),还有其他其他方式可以破坏进程吗?

目标是确保覆盖崩溃报告框架-我很确定致命信号+ exit(2)是我死亡的唯一方法,但我想确保。

1 个答案:

答案 0 :(得分:1)

是的,我相信您是对的,这是唯一的可能性。

您可以从<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".fragments.MapFragment"> <fragment android:id="@+id/fallasMap" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 的文档中确认这一点。有两个相关的宏wait(2)WIFEXITED()可用于确定WIFSIGNALED()返回给定进程的原因。没有其他可能性(我不算wait,因为它用于检测挂起的进程,而不是已终止的进程)。

实际上,WIFSTOPPED()不是系统调用,它是C库函数。系统调用为exit(3)_exit(2)执行一些C清理(例如,刷新exit(3)缓冲区并调用stdio函数),然后调用atexit()实际退出进程。