Linux进程防杀/防崩溃monitor的实现

ADB命令实战指南:从基础连接到自动化测试的完整教程 ADB(Android Debug Bridge)是Android开发调试的核心工具,它通过命令行接口实现电脑与Android设备的通信。其工作原理基于客户端-服务器架构,允许开发者执行设备管理、应用调试、文件传输等操作。在技术价值上,ADB极大提升了移动端开发与测试的效率,尤其在自动化测试和性能监控场景中不可或缺。通过掌握ADB命令,开发者可以快速进行应用安装、日志抓取、性能分析等任务,实现从手动操作到自动化流程的转变。本文聚焦于ADB的实战应用,涵盖连接方式选择、故障排查、应用生命周期管理以及自动化脚本 阅读详情

对于自行实现的很多服务,很多人喜欢用一个专门的监控进程来监控自己的服务,为了防止监控进程也崩掉,甚至使用了经典的双进程监控。不说别的,光编写调试这个双进程就够我喝一壶的啦,对于我这样专门写bug的家伙来讲,更是一件揪心的差事。就算有一天,我不再写bug了,可以操作系统的关卡你又过不了了,难关重重。这些监控程序,不管是单进程还是双进程,其根本肯定是一个big loop,而且这个big loop中几乎都要有一个sleep,否则CPU飙升,却不见得能给真正的服务,净给了这个big loop,就算没有sleep,你的cpu核心超级多,也不在乎钱,你可以专门买一个cpu来运行你这个monitor的big loop,然而在这次检测和下次检测之间的微小空隙里面还是会有很多事情可以发生的。比如下列的双进程序列:

[html]  view plain copy
  1. p1:while(true) {:t0  
  2.             status=monitor(p2):t1  
  3.             if(status == 0) {  
  4.                         start(p2);  
  5.              }  
  6. }:t2  
  7. p2:while(true) {:t0’  
  8.             status=monitor(p1):t1’  
  9.             if(status == 0) {  
  10.                         start(p1);  
  11.             }  
  12. }:t2’  
最直接的,假设p1和p2同时运行在两个cpu上,且序列同步,在t0和t1之间,t0’和t1’之间,p1和p2都被干掉会发生什么;如果在同一个cpu上运行,事情更简单,t1和t2之间干掉p1,同时给p2发送sigkill,此时操作系统调度到p2,p2本该从t0开始运行,然而由于内核信号队列中存在sigkill,它直接就exit啦,之后谁来启动它们俩。操作系统调度是程序员和管理员控制不了的,它也根本没有导出给应用层更多的控制权,因此在单cpu情况下,你无法预料调度器会怎样调度你的monitor,因而就可以设计一个混沌的序列来不断尝试干掉你的双monitor,多cpu情况下,事情更糟糕,注定你要带着脚镣跳舞。

         因此,双进程保护在逻辑上并不是很可取的,虽然大体上,对于一般的场合,大家都在用它。问题就出在不管是p1还是p2都是可以在任意时刻被干掉的,如果它们其中之一不会被干掉,事情就解决了。在linux中,init进程不能被干掉,因此可以让init来充当monitor,实际上它里面也有一个经典的big loop,可是人家因为有特权,所以多多的sleep一下也是无大碍的。事实上,很多的linux服务都使用了init进程作为了自己的monitor,你只需要编辑一下/etc/inittab就可以了,在这个inittab中,注意最后面的几行:

1:2345:respawn:/sbin/mingetty tty1

这个respawn的含义就是结束了再起来的意思,你只需要将后面再添加几行这样的信息即可,你的服务就可以被监控了。需要注意的是,这些行以:分割,第一个字段是一个唯一的id,往下顺延即可,具体的信息可以man inittab,定会一目了然,我就不翻译man手册了。
安卓应用开发环境 本文会持续更新修改,主要记录在安卓应用开发中,遇到的一些问题和解决方案。 阅读详情

相关推荐

ADB获取安卓设备IP地址:5种方法详解与自动化脚本实战

在移动开发与自动化测试中,获取设备网络地址是基础且关键的操作。IP地址作为设备在网络中的唯一标识,其获取原理基于操作系统网络接口的查询与状态读取。从技术价值看,稳定获取IP地址是实现无线调试、设备批量管理、网络行为分析及服务部署的前提。实践中,开发者常借助ADB(Android Debug Bridge)工具,通过执行Shell命令直接与安卓系统交互。针对不同安卓版本、厂商定制系统及网络环境,存在多种命令方案,包括使用现代Linux网络工具`ip`、传统`ifconfig`、查询系统属性`getprop`、

weixin_29192365的博客 301

Monitor进程Linux

Section One: mmonitor.com What Monit can do You can use Monit to monitor daemon processes or similar programs running on localhost. Monit is particular useful for monitoring daemon processes, su

专注-享学课堂 2265

ADB环境配置与核心命令实战:安卓开发调试必备指南

在移动应用开发与测试领域,命令行工具是连接开发环境与目标设备、实现自动化操作的关键桥梁。其核心原理在于建立稳定的通信链路,通过特定的协议与指令集,实现对设备的远程控制与信息交互。掌握这类工具能极大提升开发调试效率,实现应用安装卸载、日志抓取、文件传输等高频操作。ADB(Android Debug Bridge)正是安卓生态中这样一款集设备连接、应用管理、系统调试于一体的多功能工具,被誉为移动开发的“瑞士军刀”。本文将从环境变量配置与USB驱动安装等基础环节入手,详解如何解决“command not foun

weixin_30699955的博客 450

打通IE保护模式(六)保护模式中的其他限制

<br /><br />1.运行其他应用程序 <br /><br />IE具有另一个止恶意代码启动或与其他进程通信的机制。如果一个插件试图启动另一个进程,IE将在启动这个进程前要求该用户同意。举个例子来说,使用查看源代码命令会引起如下提示:<br /><br /><br /><br />   如果你的插件需要运行一个单独的EXE,你可以增加一个注册表键值来告诉IE你的EXE可以被信任并能够无须提示就被运行。这个控制这种行为的注册表键值是HKLM/Software/Microsoft/Internet Ex

wwwDotFa的专栏 1361

IEP kernel module进程

win更新占cpu风扇嘎嘎吹,断网无法降,暂停更新无法降,services.msc强行中止+禁止服务重启一分钟后降喽。

m0_47517319的博客 692

【OS学习】进程8-管程

管理进程”,即用于实现基础南横同步的工具,是由代表共享资源的数据结构和一组过程(进程PV操作的函数)组成的管理程序(封装)是由普通的进程调用的程序,在OS中会存在多个管程,由进程的调用而产生,完成特定的功能,如同步、互斥。是一个模块化的基本程序单位,有特定功能的小程序,类似原语但比原语复杂得多。面向对象的编程语言中,每个对象在底层OS内部都会绑定一个管程。管程可以理解为一个非常重要的对象/实例。管程(Monitor,监视器)

qq_58381908的博客 247

查看手机安卓版本,手机品牌:

手机品牌查询:adbshell"cat/system/build.prop|grep"product"" 查看安卓版本 adbshellgetpropro.build.version.release 获取安卓版本号apiadbshellgetpropro.build.version.sdk ...

闫振兴的博客 1637

如何通过adb查看你的机器指令集

提供一个最简单的方法:adb shell getprop ro.product.cpu.abi 转载于:https://www.cnblogs.com/shansheng/p/8532905.html

weixin_30919571的博客 465

Android用命令行查看手机架构(二)

电脑连接上手机,直接输入: adb shell getprop ro.product.cpu.abi 如果你想查看该手机支持的全部架构,则输入: adb shell getprop ro.product.cpu.abilist 本人手机的查看结果如下: ...

liuzhen007的专栏 2241

查看当前android设备api版本

adb shell "getprop ro.build.version.sdk"

北极的冰箱 4638

google GMS认证和搭建CTS 环境一

1.查看自己的android 设备里面GMS 包的版本信息 adb shell getprop | grep gms

liuhaomatou的专栏 1534

Android 中使用 getprop、watchprops 和 setprop 命令查看和更改系统属性值

原帖地址:https://blog.csdn.net/Qidi_Huang/article/details/52312573 【前言】     使用 adb 连接到 Android 系统时,要想实时查看和更改系统属性,可以使用 setprop、wathprops、setprop 这几个命令。   【功能及用法】     1、查看系统属性         getprop  [proper...

火凤燎原的博客 4476

查询Android CPU架构

其实,在adb shell命令下面,可以通过getprop的方式,获取到一些信息,比如: generic_x86_arm:/ $ getprop|grep arm [ro.bootimage.build.fingerprint]: [google/sdk_gphone_x86/generic_x86_arm:R/RPP4.200409.015/6455311:user/release-keys] [ro.build.fingerprint]: [google/sdk_gphone_x86/generic_x

航行在蓝天的蚂蚱 955

查看当前android设备已安装的第三方包

  查看当前android设备已安装的第三方包 adb shell pm list package -3   2        adb shell "getprop ro.build.version.sdk" 

weixin_34236869的博客 201

Android shell 系统命令

Android本来就是一个linux操作系统,所以大部分都是linux的命令,如mkdir,ls,netstat,mount,ps 等,这里就不具体介绍了, 主要介绍几个Android特有的。 getprop 返回Android的所有系统属性。 getevent 打印所有的

lanpy88的专栏 2530

Android与iOS移动设备取证:从ADB基础到专业工具实战指南

移动设备取证是数字取证领域的关键分支,专注于从智能手机等设备中提取、保全和分析电子证据。其核心原理在于应对Android和iOS两大生态系统的安全机制差异,通过逻辑提取、文件系统访问及物理镜像等技术手段,确保数据的完整性与可重现性。该技术的价值在于为法律调查、企业合规及数据恢复提供合法、可靠的电子证据链。在实际应用中,取证工作常面临平台碎片化、加密体系及权限管理等挑战,需借助ADB命令、专业套件及漏洞利用等工具组合。本文聚焦Android与iOS平台,详解ADB基础操作、Magisk提权、Oxygen Fo

weixin_34185512的博客 419

adb查看手机厂商,版本,型号等

adb shell getprop adbshellgetpropro.build.version.release查看安卓版本 adbshellgetpropro.build.version.sdk获取安卓版本号api

闫振兴的博客 6369
上一篇: IP地址规划的重要性
下一篇: tcpdump抓包
李-磊
博客等级 码龄16年 20粉丝 459原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值