android signal 6,android signal 处理总结
在Android 开发中遇到一些signal 的情况,简要总结如下:
1)Zygote 监控 子进程的退出情况
jellybean/dalvik/vm/native/dalvik_system_Zygote.cpp#151
151 sa.sa_handler = sigchldHandler;
153 err = sigaction (SIGCHLD, &sa, NULL);
当进程结束的时候,log 中有类似下面的消息,这就是 Zygote打印出来,它会报告子进程被什么 signal 终结的
D Zygote : Process 749 terminated by signal (11)
2)DVM 生成单独的信号处理线程,用来对三个信号做特殊处理:
每个进程包含多个线程,当进程受到 signal 的时候,可能被其中任何一个线程处理
一个应用运行在
虚拟机上dvm上一个应用也是一个dvm 进程,dvm 专门创建了一个信号处理线程来处理这3个信号,其他的线程都要block对这三个信号的处理。
这三个信号是 SIGQUIT, SIGUSR1, SIGUSR2, 看下面代码,后面两个信号 vm 内部要使用
dalvik/vm/Init.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static void blockSignals()
{
sigset_t mask;
int cc;
sigemptyset(&mask);
sigaddset(&mask, SIGQUIT);
sigaddset(&mask, SIGUSR1); // used to initiate heap dump
#if defined(WITH_JIT) && defined(WITH_JIT_TUNING)
sigaddset(&mask, SIGUSR2); // used to investigate JIT internals
#endif
//sigaddset(&mask, SIGPIPE);
cc = sigprocmask(SIG_BLOCK, &mask, NULL);
assert(cc == 0);
}
为何处理 quit
Android 应用在收到异常终止信号(SIGQUIT)时,没有遵循传统 UNIX信号模型的默认行为 (终止 + core )。而是打印出trace 文件来,以利于记录应用异常终止的原因。
Trace文件是 android davik 虚拟机在收到异常终止信号 (SIGQUIT)时产生的。 最经常的触发条件是 android应用中产生了 FC (force close)。由于是该文件的产生是在 DVM里,所以只有运行 dvm实例的进程(如普通的java应用,java服务等)才会产生该文件,android 本地应用 (native app,指 运行在 android lib层,用c/c++编写的linux应用、库、服务等)在收到 SIGQUIT时是不会产生 trace文件的。
参考
http://blog.csdn.net/rambo2188/article/details/7017241
3) 其他基于 bionic 的应用,都被 Android 动了手脚
android的实现是在 main 运行之前 先运行 debugger_init 方法,以实现拦截系统异常的几个singal:SIGILL, SIGABRT, SIGBUS, SIGFPE, SIGSEGV和SIGPIPE, 代码位于: bionic/linker/debugger.c, 把 debugger_init 注入 是通过在 linker 中做手脚 (bionic/linker/linker.
c#2255)
而后当程序收到那几个信号后,不是安装 linux 缺省的处理方法,而是运行 debugger_init 中设定的信号处理方法,此方法就是和 debuggerd (守护进程)通信,通过socket告诉其 tid ,
而后 debuggerd 通过调用
tid_attach_status= ptrace(PTRACE_ATTACH, tid, 0, 0);
这里,debuggerd就挂上ptrace了,attach到出问题的线程,debuggerd进程就是被调试进程的父进程了,这样debuggerd就可以控制tid线程了,最终生成 tomestone的信息
android signal 6,android signal 处理总结相关推荐
- android layout组件,Android UI学习 - Linear Layout, RelativeLayout
1.一些常用的公共属性介绍 1) layout_width -宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px值来设置宽 2) lay ...
- android:layout_gravity 和 android:gravity 的区别
gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gr ...
- Android横向伸缩,Android 实现伸缩布局效果示例代码
最近项目实现下面的图示的效果,本来想用listview+gridview实现,但是貌似挺麻烦的于是就用flowlayout 来addview实现添加伸缩的效果,实现也比较简单. mainActivit ...
- android ble 设备扫描程序,Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备...
本文将带你了解Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备,希望本文对大家学Android有所帮助. < 最近在做毕设,需要几周内从头学起 ...
- android window 大小,android popupWindow 中宽度莫名很大,求帮助?
这个是popupwindow的内容xml(就是放了个ListView): android:layout_width="wrap_content" android:layout_he ...
- android radiobutton 分组,Android 第十课——UI RadioButton
常用基础空组件 5 RadioGroup RadioButton 单选按钮时常用组件之一,但是开发过程中虽然很多地方会用到单选按钮,但是却不会用Android系统提供的原始样式,类似我们在写html时 ...
- android单线字体,Android自定义字体
在main文件夹下,新建assets/fonts文件,添加.otf文件 image.png 字体工具类 import android.app.Application; import android.g ...
- mp4 android自动播放,Android 使用VideoView播放MP4的简单实现
使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...
- android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...
我收到这个错误, "Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' ...
- android 编程klinon,android - 您尚未接受以下SDK组件的许可协议
android - 您尚未接受以下SDK组件的许可协议 这个问题在这里已有答案: 自动接受所有SDK许可证 34个答案 我下载了 ...
最新文章
- 2021-03-30 严反馈系统
- php 利用redis写一个聊天室,Redis实现多人多聊天室功能
- PHP——获取路径和目录
- 【年度盘点】最受欢迎的5大Java练习项目
- http响应协议分析
- Windows Phone 7 XNA触控操作之Gestures
- PHP 验证IP的合法性
- 为什么不可变性在 React 中非常重要
- 软件测试2019:第七次作业
- Machine Learning Yearning 中文翻译稿
- IDEA Mybatis 找不到映射器xml文件
- 图像标注工具labelImg使用方法
- 关于php的外文论文,php毕业设计外文翻译--通过PHP访问MySQL(适用于毕业论文外文翻译+中英文对照).doc...
- UIUC 云计算概念:SWIM协议笔记
- usb无线网卡安装在服务器上,外置无线网卡怎么安装_外置无线网卡怎么用-win7之家...
- BUUCTF MISC入门
- 硅谷火爆的云原生,你会玩吗?
- 会员管理系统有哪些功能?
- 2015年三分之一程总结1——工作生活总结(多图慎入)
- 《巴黎圣母院》的经典感情观
热门文章
- 在firefox中 屏蔽CSDN博客广告 + 添加百度搜索引擎
- 按键精灵电脑版对接百度ai,告别字库(文字识别篇)
- 唐诗三百首加密软件如何使用_文档文件加密及设计图纸加密的防泄密软件怎么部署和使用...
- php判断百度来路,判断是否通过百度搜索进入你的网站 - 小俊学习网
- 05笔趣阁小说爬取--爬取作者所有小说
- Verilog四位全加器
- uniapp开发微信公众号H5 定位功能
- scala将csv转换成insert语句
- 常州大学计算机专业研究生怎么样,常州大学计算机应用技术考研经验
- biopython----bio.PDB