android NDK fork一个守护service的进程保证它被杀后能重新启动

java 端启动一个demoService,demoService启动时就会通过AIDL 启动另外一个进程的guardService
>
android:process="com.gdut.persistentservice.guradService"
>



    </service>
 public int onStartCommand(Intent intent, int flags, int startId) {
        if(intent==null)return super.onStartCommand(intent, flags, startId);
        String action = intent.getAction();
        if(action==null)return super.onStartCommand(intent, flags, startId);
        log.d("demoService: onStartCommand:"+action);
        if(action.equals(START_NATIVATE)){
            bindAidlService(this);
        }
        return super.onStartCommand(intent, flags, startId);
    }

在guardService 里通过 JNI 去fork 一个子进程,并且在子进程里启动一个线程,去监控service
我这里为了方便debug观察,就只在fork 出来的父进程 和子进程,都启动一个线程,都去循环打log,观察他们的运行情况,能否在长按home键出来的多任务界面划掉后,能否继续运行

 void *thread_run(void* arg){
    int count =20;//*((int*)arg);
    LOGD("native thread count:%d",count);
    for(int i=0;i<count;i++){
        LOGD("native thread run:%d",i);
        sleep(1);
    }
}

void *fork_thread_run(void* arg){
    int count =20;//*((int*)arg);
    LOGD("native thread count:%d",count);
    for(int i=0;i<count;i++){
        LOGD("native fork thread run:%d",i);
        sleep(1);
    }
}

void start_thread(){
    pid_t fpid;
    fpid = fork();
    if(fpid<0){
        LOGD("native fork error");
    }else if(fpid == 0){
        LOGD("native fork child");
        pthread_t id;
        int count=10;
        pthread_create(&id,NULL,fork_thread_run,(void*)&count);
    }else{
        LOGD("native fork parent");
        pthread_t id;
        int count=10;
        pthread_create(&id,NULL,thread_run,(void*)&count);
    }
}

发现,当程序安装进去后第一次运行,划掉改任务后,子进程的log会继续打,其他进程全被停止了。但是第二次运行,发现子进程会fatal,看NDK 的log,
backtrace:
#00 pc 0003806c /system/lib/libc.so (nanosleep+8)
#01 pc 00021a8f /system/lib/libc.so (sleep+38)
#02 pc 00000d65 /data/app/com.gdut.persistentservice-1/lib/arm/libserviceguard.so (fork_thread_run(void*)+44) //00000d65运行的是sleep(1)
#03 pc 000137ab /system/lib/libc.so (__pthread_start(void*)+30)
#04 pc 0001188b /system/lib/libc.so (__start_thread+6)

发现死在 sleep 方法这里,换成 usleep 也是会死。这里我百思不得其解啊,求高人指点迷津,还是我这种fork 出一个进程再开线程的写法不对啊,求指引明路
0

4个回答

兄弟,android NDK fork一个守护service的进程保证它被杀后能重新启动 你搞出来了吗 能不能指点我一下啊

0

兄弟,android NDK fork一个守护service的进程保证它被杀后能重新启动 你搞出来了吗 能不能指点我一下啊

0

楼主,通过服务启动另一个程序的service,只能通过aidl吗?我是直接用的intent启动的,有什么弊端吗?

0

因为android 5.0以上 ,fork出来的进程 会被杀死. fork之后,在android层还是会记录下 你在 setpid() 之前 属于的进程组, 就算被init领养 也没用, 这是一种 "历史同组杀". 所以 你运行sleep的时候,其实已经时僵尸进程了

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android 通过JNI实现双守护进程,保证服务不被杀死 源码
对应博文链接:http://blog.csdn.net/yyh352091626/article/details/50542554 杀不死的服务一直是一件很头疼的问题,这边给出源码:Android 通过JNI实现双守护进程,保证服务不被杀死。完美运行在谷歌原生Android5.0系统
android service 教你打造不被杀死的service-------service进程守护
转载请标明出处: nhttp://blog.csdn.net/liuzg1220;n本文出自:【HugeBug的博客】nnn简介nnn相信做android的兄弟们经常会提出这样的要求,我们能不能让我们的程序在后台运行且不停的采集数据,我们给我的答案是能-------service可以做到这样的事,那我们能不能让我们后台运行的程序不要轻易被系统回收呢?----------这个有点难:
ndk双进程守护
前言nn很多后台服务很容被系统干掉,尤其红米类型的手机,它们可能是为了省电一些服务它们会自动消除掉。试了很多种方法,不如提高优先级什么的都没有太大的效果,这个ndk双进程守护相对好一点,但是也并不是多么的保险,仅供参考。 n上一篇介绍AS下的ndkAndroid-studio的ndknnnn正文nn开启服务nnnnIntent intent = new Intent(this, LittleWid
android 使用Service进行双进程守护,防止进程被杀
以下所用的方法只适用于防止app太久在后台太久而被系统杀死,在系统的一键清除功能下进程还是会被杀死的。n若要防止进程被系统的一键清除功能杀死,要设置允许当前app自启动。如何设置请看 跳转自启动管理页
Android 通过JNI实现守护进程
开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家...虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了...n网上搜寻一番后,主要的方法有以下几种方法,但都是治标不治本:n1、提高Service的优先级:这个,也只能说在系统内存不足需要回收资源的时候,优先级较高,不容易被回收,然并卵...
Android 双进程守护(分分钟实现)
是这个情况,前几天在腾讯公开课看到的,确实不错,首先我先说下怎么实现的?**实现思路:**创建A,B两个服务,然后同时启动A、B服务,双进程守护,当然要另开一个进程,通过AIDL实现跨进程通信,在A、B服务中的onStartCommand方法中,互相绑定对方,然后我们想想,服务如果被强杀了怎么办,接下来是关键:我们实现ServiceConnection这个接口,在onServiceDisconnec
如何保持守护进程被杀死后能够再次启动
系统自动启动Linux APP 方式有很多rn如利用 inittab init.drn关于守护进程被杀死后再次启动的文章看了很多,一直没找到适合我项目的。最后想了一个办法曲线救国。rn上代码rn#include n#include n#include n#include n//inittab 加入监听此程序n//利用此程序监听test_api_app 进程执行情况n nint main(void)
Android 开发之Service 探索如何保证Service不被杀死或被kill之后自动重启
前言:n在我司项目1.0版本的时候消息是使用的环信、用了之后发现各种bug,各种机型不支持导致app崩溃,于是在2.0版本果断去掉环信,使用了公众号用的那套消息系统(老大自己写的)并做了扩展升级。搞了近半个月终于是搞完了,项目也顺利上线......
Android Service保活方法总结(不被杀死)双进程守护
写在前头nn保活Service我们需要做什么:nn1.在应用被关闭后保活(最难)nn2.在内用占用过大,系统自动释放内存时保活(优先杀死占用较高的Service)nn3.重启手机后自动开启Servicenn4.手机息屏后不被释放内存nn5.手动清理内存时保活nnnn首先介绍一下Service的等级:nn一、前台进程n二、可见进程n三、服务进程n四、后台进程n五、空进程 ---关闭应用后,...
守护进程方式保证App不被杀死
思路nlinux进程中用到的方法n代码n1 linux进程部分n2 App部分n3 Androidmk部分转载请注明链接因为Android的内存管理机制,当系统内存紧张时,App如果运行在后台,容易被LowMemoryKiller杀死。为了保证App的Service能够在杀死后重启,下面介绍一种在进程杀死后能够重新拉起App的方式。1. 思路:简单来讲,就是开启linux守护进程,轮询App进程是否
Android 双进程守护
nnnn前言nn  最近有在项目中用到高德的定位SDK,功能是每隔一定的时间获取一次用户的地理位置,采取的方案是在后台开启一个 Service,监听高德地图的位置变化。 n  该功能在用户手机屏幕亮时完美实现,但是当屏幕被关闭的时候,位置信息却无法被获取了,经过原因的排查,发现是由于在用户手机息屏后,后台的 Service 被系统清除,所以功能无法起作用,也就是所谓的进程被杀了。 n  杀进程,一...
实现安卓widget不被kill的方法
widget本身是不会被kill的,widget原本就是一个broadcastreciver,而且是静态的,这就意味着随时发一个订阅过的广播widget都能收到,并且会调用onReceive()方法。widget之所以不能运行了,往往是应为对应的service被kill。要想widget一直运行就要使service被kill了可以重启,service杀不死的方法很多,如:Service是androi
Android应用进程防杀指南2-双进程守护
假设我们的APP中开启了两个Service,分别是A和B,那么:n如果A守护B,则B挂掉的同时,A就应该把B启动起来,反之亦然,也就是说A和B应该是互相守护,无论谁被杀掉,对方就把它拉起来。
如何保证Service在后台不被杀死?
一、前期基础知识储备(1)为什么要保证后台Service不被杀死?提高应用存在感。对于大厂的应用来说,其程序“活着”不是问题,但是为了带来更好的用户体验,提高用户粘性,就需要尽可能调用程序更多的服务,这样才能带来更多的用户体验(不一定更好,但是数量占优);对于小家来说,尽可能的让程序“活着”是它们的第一要务,通过后台服务的方式让应用存活在用户手机里也是一种存活的方式。(2)后台Service真的可...
Android面试题-service被kill之后怎么让它重启
Android面试题-service被kill之后怎么让它重启
如何保证进程不被杀死的几个办法
前言nn开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家…虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了… n一般来说:有以下几种可行的方法来使自己的进程不被杀死nnnnn1、提高Service的优先级:这个,也只能说在系统内存不足需要回收资源的时候,优先级较高,不容易被回收,然
Android 永生不死的进程,进程守护,进程常驻,进程保活
应用场景:后台图片备份,息屏计步nn应用在深圳知名大型互联公司,日活用户2000万nnnn支持系统2.3到6.0nn支持大部分设备,包括三星,华为,oppo,nexus,魅族等等nn小米不行nn进程优先级:nnnn前台进程n 可见进程n 服务进程n 后台进程n 空进程nnnnnnn(1)什么时候系统会去杀死进程?nnnnAndroid系统会在内存不足的时候去将进程杀死,俗称Low M...
Android进程保活——双进程守护
作为一名知乎重度使用患者,前几天刷知乎的时候,看到一篇帖子。怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死? 这样的一款手机应用,就一流氓软件,后台一直有service在跑着,如果功耗很大,而且对用户来说不是很重要的app,很大可能性被用户卸载。 奈何,这几天做的app就有这个需求,一款结合物联网的app,这个app其中的一个功能就是,有个心率记一直检测患者的心率,且手机app能...
进程监控守护工具-当监控列表中的进程挂掉后会自动重新启动
【很实用的小工具】:可以将需要监控的程序添加到列表中,程序检测该进程没有运行的时候会重新启动该进程,避免由于进程被意外结束导致不必要的麻烦。该软件可能会被报毒(E编写),如果不放心请勿下载。
Android Service被关闭后自动重启,解决被异常kill 服务
Android Service被关闭后自动重启,解决被异常kill 服务
Android 双进程守护service,demo框架分享给各位需要的程序猿,不好不要钱
它是利用系统的漏洞来启动一个前台的Service进程,与普通的启动方式区别在于,它不会在系统通知栏处出现一个Notification,看起来就如同运行着一个后台Service进程一样。这样做带来的好处就是,用户无法察觉到你运行着一个前台进程(因为看不到Notification),但你的进程优先级又是高于普通后台进程的。那么如何利用系统的漏洞呢,大致的实现思路和代码如下:思路一:API &amp;lt; 1...
Android实现双进程守护
如何保证Service不被Kill有关Service的知识请参考Android Service全面解析这篇文章,写的很详细。(1)onStartCommand方法,返回START_STICKY@Override npublic int onStartCommand(Intent intent, int flags, int startId) { n flags = START_STICKY
Android双进程守护service保活
android应用进程保活可以从以下来年个方面考虑nnn1、尽量保证应用进程不被杀死。n2、进程被杀死后能够复活。nnn要保证进程不被杀死是不可能的,系统在资源紧缺的情况下回根据进程优先等级杀掉有限等级比较低的进程,所以为了使自己的进程不易于被系统杀死,只能提高进程的优先级,这个进程重要性的层次结构有五个等级,按高到低分为n1)前台进程 Foregroundn process
Android进程常驻,防止被杀死
这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下 ,以及360获取root权限下,clean master获取root权限下都无法杀死进程
Android开发之如何保证Service不被杀掉(前台服务)
序言rnrn    最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill。参考了现今各种定制版的系统和安全厂商牛虻软件,如何能保证自己的Service不被杀死呢?其实除了常规的手段,我们可以参考一下微信和360,设置-程序-正在运行,可以看到微信是同时开启了两个进程和服务:rnrn  rnrnService简介rnr
ndk层实现双进程守护
在linux 下,利用子进程发起建立Socket 连接,保持主进程达到90%保活率,包含完整C++代码和Java代码,注释详细,可直接用于项目开发
NDK实现后台服务保活
现在的国产手机基本都是不能保证的 随随便便一杀就没了 复活不了;我的华为P9就不行,其他的我觉得也够呛,但是使用公司自己得MTK5.0平台, 那真是特吗和病毒没什么区别。。。nn我这是在腾讯课堂里学习来得;动脑学院,挺好得一个学习android看视频得地方;nn1: java方式守护nnAndroidMainfast.xml 中定义process = “:remote”字段;n手机厂商...
Android应用进程防杀指南1-常用套路
> 1.如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被killed。n> 2.如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.n> 3.如果客户端已经连接到service
Android 前台Service保证APP不被杀死
需求:1、程序后台每隔10秒钟扫描一次WIFI,扫描到XXX的wifi就发送通知栏消息给用户n          2、程序 后台监听声音输入,并解析声音,然后发送通知栏消息给用户nnn普通的Service(后台Service): 通过手机的最近运行程序,可以直接杀死,起不来。n             尝试过的方法:1、 onStartCommand方法,返回START_STICKY
android杀死进程后重启进程情况分析
1. 应用程序内就是普通的启动了activity,这时候杀死进程android.os.Process.killProcess(android.os.Process.myPid()),进程就杀死了。n2. 应用程序内如果有启动了service正在运行:n   1)如果service的onStartCommnad()方法返回的是START_NOT_STICKY, 这时如果杀死进程, 进程就杀死了
nodejs 简易守护进程
正常情况下 进程出现未捕获异常时候,会退出, n但有时候当工作进程比较重要,出现异常时候希望能够重启一个新进程继续工作,这时需要使用到守护进程主要逻辑:主进程监听子进程的exit 事件,当子进程exit的时候,重新fork一个新的工作进程var cluster = require('cluster');let index = 0;nif (cluster.isMaster) {n var wo
App在后台被杀死后重启-重进首页方法
感谢这位哥的思路。nn这个问题很常见,基本所有app都会遇到这个问题。但是很多开发者都没有处理。nn问题的起因:我的app在进入后台后一段时间,可能被系统干掉了,然后通过多任务键,或者图标再点进去操作,出现xxId为nullnn经过一番探索发现:nnapp在被系统干掉后,重新进入,是会实例出所有的界面(因为他们都重写了onsaveInstance方法),但是这个界面所有的变量都变为null了(如果...
Android Service后台进程守护
看了很多资料,说是在android java层界面实现服务自启动,但是亲测,无论怎么做都达不到自启动。n后面看了网上一些资料,从linux层面着手,感觉可行,不过很多资料都采用轮询的方法去启动服务,个人感觉轮询从耗电等各方面考虑并不是最优方案,因为如果可以检测到服务挂了然后直接启动服务可能更节省性能,而android本身提供了这样的机制,service死掉后会调用生命周期中的onDestroy进
从native层实现startService(android7.1原生系统保活)
一.准备工作:n因为我们的工程会包含binder库和binder间接依赖的cutils库,但这些库都不在Ndk里面,直接在native层去编译会找不到,所以要放在源码环境下编译。n#include &amp;amp;amp;amp;amp;lt;binder/MemoryHeapBase.h&amp;amp;amp;amp;amp;gt;n#include &amp;amp;amp;amp;amp;lt;binder/ProcessState.h&amp;amp;amp;amp;amp;gt;n#inclu
Android Apk 进程常驻,不被杀死
n n n nn在 AndroidManifest.xml文件中使用nnnandroid:persistent=&quot;true&quot;属性nn&amp;lt;applicationnn android:persistent=&quot;true|false&quot;nn&amp;gt;nn&amp;lt;/application&amp;gt;nnnn需要重启系统下,因为系统框架层需要统计带有该标识位的应用;nnnn设置...
service在手机加密锁屏时,被系统杀掉的原因,以及处理的两种思路
nn1.第一种思路n2.第二种思路:让服务重启n1.onStartCommand 的四种返回值。n2.使用场景nnn3.其他和service相关的知识点n1.生命周期不同。n2.绑定方式的service可以使用到服务中的方法和成员变量nnnnnnnn 被杀掉的后台进程,如何才能不让系统杀掉?nnn1.第一种思路nn每个手机都有省电模式,在这种模式下,手机锁屏后,会认为一些进程为耗电进程,从而把它...
创建Android守护进程(底层服务)
创建Android守护进程(底层服务)nnnn前言nnAndroid底层服务,即运行在 linux 下的进程,是 Android 系统运行的基础,完成 Android 或者说计算机最基本的功能。比如连接服务(包括 WIFI,BT 等等);比如 Android 的 adb 功能;比如存储监控等等。没有这些底层服务,上层也就没有了对应的功能。nnAndroid 底层服务往往是常驻内存,时刻运行完成任务...
Android NDK调用C++实现双进程守卫
Android NDK调用C++实现双进程守卫 本例是从博客http://blog.csdn.net/ztemt_sw2/article/details/27101681中整理出来,分享给大家参考学习。试了一下这种方法,可以实现重启进程,但用不同的机器和不同的软件杀,效果都不一样,还是不能完全守卫,不知道有没有其他办法增强守卫效果?
保护service不被杀死(有些机型不可实现,待更新)
保护service不被杀死(有些机型不可实现,待更新)详细代码在此贴出:https://github.com/yzbbanban/Test_Romote n此案例支持以下型号手机(感谢腾讯优测平台): nNokia 6 7.0可以 n华为mate 9 7.0失败 n华为5.1 可以 n三星 s6 可以 noppo R7 plus 可以 n小米死掉 n魅族死掉 n锤子死掉 n索尼Z5 6.0 C
android守护进程,进入后台或异常后再次启动app
当前做的app要求开机启动,并且退出后或异常闪退时也要重新打开app。下面说一下进入后台后或闪退后重启进入前台方法方法1、缺点:出现异常闪退时,不会重启,因为没来及进onActivityStoppedprivate int mFinalCount;nn /**n * 在application中调用,进入一个activity时执行onActivityStarted,离开一个activi...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 ios培训后能找到工作吗 学习java进程