据我所知,Linux内核清理进程条目的唯一方法是该进程执行exit(2)
syscall还是无法处理致命信号(例如SIGSEGV
, SIGABRT
,SIGTERM
,SIGKILL
等)。我知道SIGKILL
无法处理,因此甚至没有真正“交付”到流程中。.这有点符合我在这里的想法。
假设内核本身保持完好和有效(对硬件故障/设备关闭/紧急情况等不感兴趣),还有其他其他方式可以破坏进程吗?
目标是确保覆盖崩溃报告框架-我很确定致命信号+ exit(2)
是我死亡的唯一方法,但我想确保。
答案 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()
实际退出进程。