在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 处理总结相关推荐

  1. android layout组件,Android UI学习 - Linear Layout, RelativeLayout

    1.一些常用的公共属性介绍 1) layout_width -宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px值来设置宽 2) lay ...

  2. android:layout_gravity 和 android:gravity 的区别

    gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gr ...

  3. Android横向伸缩,Android 实现伸缩布局效果示例代码

    最近项目实现下面的图示的效果,本来想用listview+gridview实现,但是貌似挺麻烦的于是就用flowlayout 来addview实现添加伸缩的效果,实现也比较简单. mainActivit ...

  4. android ble 设备扫描程序,Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备...

    本文将带你了解Android应用开发Android 7.0  BLE scan 问题:程序无错但扫描不到BLE设备,希望本文对大家学Android有所帮助. < 最近在做毕设,需要几周内从头学起 ...

  5. android window 大小,android popupWindow 中宽度莫名很大,求帮助?

    这个是popupwindow的内容xml(就是放了个ListView): android:layout_width="wrap_content" android:layout_he ...

  6. android radiobutton 分组,Android 第十课——UI RadioButton

    常用基础空组件 5 RadioGroup RadioButton 单选按钮时常用组件之一,但是开发过程中虽然很多地方会用到单选按钮,但是却不会用Android系统提供的原始样式,类似我们在写html时 ...

  7. android单线字体,Android自定义字体

    在main文件夹下,新建assets/fonts文件,添加.otf文件 image.png 字体工具类 import android.app.Application; import android.g ...

  8. mp4 android自动播放,Android 使用VideoView播放MP4的简单实现

    使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...

  9. android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...

    我收到这个错误, "Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' ...

  10. android 编程klinon,android - 您尚未接受以下SDK组件的许可协议

    android - 您尚未接受以下SDK组件的许可协议 这个问题在这里已有答案: 自动接受所有SDK许可证                                     34个答案 我下载了 ...

最新文章

  1. 2021-03-30 严反馈系统
  2. php 利用redis写一个聊天室,Redis实现多人多聊天室功能
  3. PHP——获取路径和目录
  4. 【年度盘点】最受欢迎的5大Java练习项目
  5. http响应协议分析
  6. Windows Phone 7 XNA触控操作之Gestures
  7. PHP 验证IP的合法性
  8. 为什么不可变性在 React 中非常重要
  9. 软件测试2019:第七次作业
  10. Machine Learning Yearning 中文翻译稿
  11. IDEA Mybatis 找不到映射器xml文件
  12. 图像标注工具labelImg使用方法
  13. 关于php的外文论文,php毕业设计外文翻译--通过PHP访问MySQL(适用于毕业论文外文翻译+中英文对照).doc...
  14. UIUC 云计算概念:SWIM协议笔记
  15. usb无线网卡安装在服务器上,外置无线网卡怎么安装_外置无线网卡怎么用-win7之家...
  16. BUUCTF MISC入门
  17. 硅谷火爆的云原生,你会玩吗?
  18. 会员管理系统有哪些功能?
  19. 2015年三分之一程总结1——工作生活总结(多图慎入)
  20. 《巴黎圣母院》的经典感情观

热门文章

  1. 在firefox中 屏蔽CSDN博客广告 + 添加百度搜索引擎
  2. 按键精灵电脑版对接百度ai,告别字库(文字识别篇)
  3. 唐诗三百首加密软件如何使用_文档文件加密及设计图纸加密的防泄密软件怎么部署和使用...
  4. php判断百度来路,判断是否通过百度搜索进入你的网站 - 小俊学习网
  5. 05笔趣阁小说爬取--爬取作者所有小说
  6. Verilog四位全加器
  7. uniapp开发微信公众号H5 定位功能
  8. scala将csv转换成insert语句
  9. 常州大学计算机专业研究生怎么样,常州大学计算机应用技术考研经验
  10. biopython----bio.PDB