首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 进程保活 的两种实现方式

掉进程模拟应用被意外杀死的情况(或者用360手机卫士进行清理操作), 如果服务的onStartCommand返回START_STICKY, 在进程管理器中会发现过一小会后被杀死的进程的确又会出现在任务管理器中...但是如果在系统设置的App管理中选择强行关闭应用,这时候会发现即使onStartCommand返回了START_STICKY,应用还是没能重新启动起来!...应用优先级 Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收 Android将进程分为5个等级,它们按优先级顺序由高到低依次是: 空进程 Empty process...的sa_flags中的SA_NOCLDSTOP选项打开, 当子进程停止(STOP作业控制)时, 不产生此信号(即SIGCHLD)。...不过,当子进程终止时,仍旧产生此信号(即SIGCHLD)。

6.5K20

操作系统进程的实现---中---05

结构: 子进程进入A,父进程等待… 终于可以让A执行了… 小结 ---- 内核级线程实现 进程=资源+执行序列。 执行序列=线程。...进程需要进入内核执行,所以进程里面的执行序列其实就是一个内核级线程。 而所谓对资源的管理,其实主要指的是对内存资源的管理。 因为要实现进程,首先需要实现一个内核级线程,然后再是对内存的管理。...只支持进程切换,因此下面还需要切换内存,这里暂时不做讨论 ---- 子进程创建完后被调度 上面父进程通过sys_fork创建了一个子进程,子进程除了内核栈和父进程不一样之外,用户栈和eip,cs都和父进程一样...sys_fork执行完后,假设,此时父进程时间片到期了,如果进行进程调度,此时就切换到了刚创建完毕的子进程去执行 那么,在进行进程切换时,子进程会将自己的tss中保存的寄存器状态,全部扣到当前CPU...条件判断 因此,父进程再创建完子进程,并且子进程第一次运行时,其实执行的就是父进程的代码,只不过,在进入exec后,此时子进程就会去执行和父进程不一样的代码了,相当于一把叉子,分界点就在上面的if判断处

90760
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【linux】进程状态与优先级

    init进程会定期调用 wait() 收集其子进程的状态,因此可以自动清理僵尸进程。 发送信号:在某些情况下,如果父进程未正确处理子进程的终止,可以考虑结束父进程(确保做到安全和适当)。...孤儿进程的处理 在UNIX和类UNIX系统(Linux)中,孤儿进程不会被遗弃无人管理,它们会被init进程(PID为1的进程)自动接管。...僵尸进程:子进程已经结束,但父进程还未回收(调用wait()或waitpid())子进程的相关信息(如PID、退出状态等),导致子进程虽已结束但仍占用系统资源。...编程中的应对策略 在编写涉及进程创建的程序时,应该确保: 父进程能够适当地管理子进程的生命周期,包括在子进程结束时收集其状态。 如有可能,设计程序结构使父子进程同步结束,避免产生孤儿进程。...孤儿进程一般都是会被1号进程(OS本身)进行领养的,以此确保子进程被正常回收 直接在命令行中启动的进程,他的父进程是bash,bash会自动回收新进程的Z 04.进程的阻塞、挂起和运行 在操作系统中,

    20120

    通过fork来剖析Linux内核的内存管理和进程管理(下)

    首先需要说明的一点是,进程的task_struct是资源封装和管理的结构,如管理进程的虚拟内存mm_struct,进程的打开文件files_struct等,而进程参与调度使用的是调度实体去管理调度(对于普通的进程是...如果创建的是子进程,那么就直接和父进程写时复制方式共享用户栈,而栈不需要在进行设置,直接使用父进程的。...eret 可以看的,子进程将自己内核栈中的pt_regs恢复到相应的寄存器中,完成了异常的恢复,最终调用eret,从异常中返回,这个时候硬件自动将 elr_el1设置到pc, spsr_el1设置到pstate...sp 改变为了sp_el0,共享父进程的用户栈(对于创建子进程来说)。 子进程返回的时候,由于负载均衡,不一定和父进程在一个cpu上,所以父子进程可以并发执行。...写到这里来总结一下,发生fork的时候进程管理做的事情: 首先是调用sched_fork为新创建的进程构建调度相关的基础组件,如设置优先级、调度类计算虚拟运行时间等属性信息,为参与最终的调度做准备,然后调用

    1.7K32

    【Linux】关于进程的理解、状态、优先级和进程切换

    当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 下面,我们可以通过具体的例子来看一看僵尸进程,进程退出,但是没有被回收(父进程、OS)。...把左侧终止,在执行上面监视的命令,就不存在上面的进程了,这是因为把父子进程都终止的时候,操作系统自动回收了 这就是僵尸进程。内存泄漏不仅仅只体现在malloc\new上,在系统中也会存在。...父进程如果一直不读取,那子进程就一直处于Z状态 维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说, Z状态一直不退出, PCB一直都要维护...子进程被1号领养的就是孤儿进程。 父进程先退出的现象是一定存在的,子进程会被操作系统领养(1号进程),这是为了回收子进程退出的时候对应的僵尸,管理子进程 被领养的进程就是孤儿进程。...同时,子进程以前的状态是S+,现在变成了S,如果前台进程创建的子进程,如果变成孤儿会自动变成后台(此时用ctrl+C杀不掉,只能用kill解决) ---- 四、进程优先级 1.优先级概念 优先级 对于优先级的理解

    2.7K20

    进程间的通信--管道

    通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。...接着创建子进程,子进程会继承父进程中打开的文件,也就是继承父进程的文件描述符表,此时父子进程就会共享同一个文件资源,子进程可以通过4号文件描述符向文件中进行写入,父进程就可以通过3号文件描述符从文件中进程读取...为什么子进程主动clos(0/1/2),不影响父进程继续使用显示器文件? 内存级引用计数会--,当内存级引用计数减到0,就释放文件资源。 父子进程关闭不需要的文件描述符,为什么之前需要打开?...2.1.3管道的4种情况 如果管道是空的,并且写端文件描述符没有关闭,读取条件不具备,读进程(父进程)会被阻塞,自动等待读取条件具备(写入进程再重新写入)。...2.1.4管道的五种特征 匿名管道:只能用来进行具有血缘关系的进程之间通信(常用于父子进程),因为子进程是对父进程的写时拷贝,不能用于毫不相关的两个进程。

    7610

    Linux系统 —— 进程系列 - 进程的概念,PCB与PID和fork

    标示符: 描述本进程的唯⼀标⽰符,用来和其他进程进行区别 2. 状态: 任务状态,退出代码,退出信号等 3. 优先级: 相对于其他进程的优先级 4....PID 获取当前进程PID - getpid 进程创建的时候, 里面都有一个自己的PID,我们如何在一个程序运行时获取这个程序的PID呢?...系统会自动创建bash进程 2.命令行再执行所有的程序或者指令时,它所对应的进程,所对应的父进程就是bash本身。...我们自己执行的程序或者指令都是bash进程的子进程 3.执行出问题的时候,只会是子进程出问题,不会影响bash进程 4.我们启动xshell时候,系统自动生成bash进程,显示命令行...在我们的操作系统里,我们的父进程比上子进程是1:N的,简单来说就是任何一个父进程可以有一个或者多个子进程 所以我们在创建子进程时,一定要把子进程的pid返回给父进程,因为父进程需要通过返回的不同的

    12310

    操作系统复习笔记——第三章 进程

    进程可看做是正在执行的程序。进程需要一定的资源(如CPU时间、内存、文件和I/O设备)来完成其任务。这些资源在创建进程或执行进程时被分配。 进程是大多数系统中的工作单元。...与程序计数器一起,这些状态信息在出现中断时也需要保存,以便进程以后能正确地继续执行。 ·CPU调度信息:这类信息包括进程优先级、调度队刻的指针和其他调度参数 ?...通常,进程需要一定的资源(如CPU时间、内存、文件、I/O设备)来完成其任务。在一个进程创建子进程时,子进程可能从操作系统那里直接获得资源,也可能只从其父进程那里获得资源。...父进程可能必须在其子进程之间分配资源或共享资源(如内存或文件)。 限制子进程只能使用父进程的资源能防止创建过多的进程带来的系统超载。 当进程创建新进程时,有两种执行可能: ①父进程与子进程并发执行。...父进程终止其子进程的原因有很多,如: 子进程使用了超过它所分配的一些资源。

    96610

    「独立的浪漫」:进程与操作系统的优雅平衡

    进程:是程序的执行实例,它是动态的,并且在执行过程中会占用系统资源(如CPU时间、内存等)。 内存在同一时间会有成百上千的被加载进来的程序,操作系统是需要对其进行管理的。...当子进程出问题,不会影响bash进行,因为进程具有独立性;当我们启动xshell时,系统自动生成bash进程。 创建进程 创建进程需要使用系统调用fork函数。...#include pid_t fork(); fork 系统调用,没有参数,有两个返回值 fork 在创建进程成功时,给父进程返回子进程的pid,给子进程返回0,失败时返回...CPU依次选择一个task_struct来执行。 进程的运行阻塞挂起状态 运行:但是只要一个进程在调度队列中,它就是running 状态。...僵尸进程的内存泄漏问题是很严重的(系统界别) 常驻内存的进程是非常惧怕内存泄漏问题的。 孤儿进程 如果在父子进程的关系中,父进程先于子进程结束,子进程就会变成孤儿进程。

    6110

    进程管理And线程实现

    进程运行 内核选择一个就绪的进程, 让它占用处理机并执行 (为何选择? && 如何选择?)...**就绪到就绪挂起 : **当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时, 系统会选择挂起低优先级就绪进程....阻塞挂起到阻塞 : 当一个进程释放足够内 存时, 系统会把一个高优先级阻塞挂起(系统认为会很快出现所等待的事件)进程转换为阻塞进程....和它字符串参数数组(argv) 如果调用成功(相同的进程,不同的程序) 代码,stack,heap重写 进程控制 之 等待和终止进程 wait()系统调用是被父进程用来等待子进程的结束 一个子进程向父进程返回一个值...,所以父进程必须接受这个值并处理 wait()系统调用担任这个要求 它使父进程去睡眠来等待子进程的结束 当一个子进程调用exit()的时候,操作系统解锁父进程,并且将通过exit()传递得到的返回值作为

    11910

    Redis持久化技术及方案选择

    2) 父进程执行fork操作创建子进程,这个过程中父进程是阻塞的,Redis不能执行来自客户端的任何命令 3) 父进程fork后,bgsave命令返回”Background saving started...2) 父进程执行fork操作创建子进程,这个过程中父进程是阻塞的。...首先说明一下fork操作: 父进程通过fork操作可以创建子进程;子进程创建后,父子进程共享代码段,不共享进程的数据空间,但是子进程会获得父进程的数据空间的副本。...在操作系统fork的实际实现中,基本都采用了写时复制技术,即在父/子进程试图修改数据空间之前,父子进程实际上共享数据空间;但是当父/子进程的任何一个试图修改数据空间时,操作系统会为修改的那一部分(内存的一页...虽然fork时,子进程不会复制父进程的数据空间,但是会复制内存页表(页表相当于内存的索引、目录);父进程的数据空间越大,内存页表越大,fork时复制耗时也会越多。

    73140

    Redis高可用详解:持久化技术及方案选择

    父进程执行fork操作创建子进程,这个过程中父进程是阻塞的,Redis不能执行来自客户端的任何命令; 父进程fork后,bgsave命令返回”Background saving started”信息并不再阻塞父进程...父进程执行fork操作创建子进程,这个过程中父进程是阻塞的。...首先说明一下fork操作: 父进程通过fork操作可以创建子进程;子进程创建后,父子进程共享代码段,不共享进程的数据空间,但是子进程会获得父进程的数据空间的副本。...在操作系统fork的实际实现中,基本都采用了写时复制技术,即在父/子进程试图修改数据空间之前,父子进程实际上共享数据空间;但是当父/子进程的任何一个试图修改数据空间时,操作系统会为修改的那一部分(内存的一页...虽然fork时,子进程不会复制父进程的数据空间,但是会复制内存页表(页表相当于内存的索引、目录);父进程的数据空间越大,内存页表越大,fork时复制耗时也会越多。

    49010

    Redis 高可用特性之 “持久化” 详解

    父进程执行 fork 操作创建子进程,这个过程中父进程是阻塞的,Redis 不能执行来自客户端的任何命令。...自动触发 bgrewriteaof 时,可以看到服务器日志如下: ? 文件重写的流程 文件重写流程如下图所示: ? 关于文件重写的流程,有两点需要特别注意: 重写由父进程 fork 子进程进行。...2):父进程执行 fork 操作创建子进程,这个过程中父进程是阻塞的。...在操作系统 fork 的实际实现中,基本都采用了写时复制技术,即在父/子进程试图修改数据空间之前,父子进程实际上共享数据空间。...虽然 fork 时,子进程不会复制父进程的数据空间,但是会复制内存页表(页表相当于内存的索引、目录);父进程的数据空间越大,内存页表越大,fork 时复制耗时也会越多。

    62620

    Django开发常用30个软件包

    Celery 用来管理异步、分布式的消息作业队列,可用于生产系统来处理百万级别的任务。 django-celery是django web开发中执行异步任务或定时任务的最佳选择。...Django REST 框架 构建REST API的优秀框架,可管理内容协商、序列化、分页等,开发者可以在浏览器中浏览构建的API。  ...便于集成各种认证方式,如 OAuth, Basic Auth, 或API Tokens。 内建请求速率限制。...利用这个包,只需简单的配置就可以自动生成 admin 管理后台可以修改管理常量。...这个评论库提供了基本的评论功能,但是只支持单级评论。好在这个库具有很好的拓展性,基于上边提到的 django-mptt,就可以构建一个支持层级评论的评论库。

    3.4K20

    Linux:进程概念(三.详解进程:进程状态、优先级、进程切换与调度)

    当进程退出并且父进程(使用wait()系统调用,后面讲)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。...当父进程先于子进程结束时,子进程的父进程ID会被修改为1,即init进程的进程ID,这样子进程就成为了孤儿进程。 孤儿进程的父进程ID会被修改为1,即init进程的进程ID。...这种领养机制保证了即使父进程终止,子进程仍然能够正常运行并被系统管理 孤儿进程的产生通常发生在父进程没有等待子进程结束就提前结束的情况下。...为了避免产生孤儿进程,父进程在创建子进程后应该等待子进程结束,并及时处理子进程的终止状态。这样可以确保子进程在父进程结束时能够正常退出,而不会成为孤儿进程。...长格式包括更多的字段,如进程状态、进程 ID、父进程 ID、优先级、CPU 使用情况、内存使用情况等。

    1K10

    Apache运行机制剖析

    在Unix系统中,父进程通常以root身份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。User和Group指令用于配置子进程的低特权用户。...这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。       当并发量请求数到达MaxClients(如256)时,而空闲进程只有10个。apache为继续增加创建进程。...MaxSpareServers:设置了最大的空闲进程数,默认为10。如果空闲进程数大于这个值,Apache父进程会自动kill掉一些多余子进程。...这样,客户端无须等待新线程或新进程的建立即可得到处理。在Unix中,为了能够绑定80端口,父进程一般都是以root身份启动,随后,Apache以较低权限的用户建立子进程和线程。...如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。 StartServers:服务器启动时建立的子进程数,默认值是"3"。

    1.3K31

    Redis持久化方案该如何选型

    2) 父进程执行fork操作创建子进程,这个过程中父进程是阻塞的,Redis不能执行来自客户端的任何命令 3) 父进程fork后,bgsave命令返回”Background saving started...2) 父进程执行fork操作创建子进程,这个过程中父进程是阻塞的。...首先说明一下fork操作: 父进程通过fork操作可以创建子进程;子进程创建后,父子进程共享代码段,不共享进程的数据空间,但是子进程会获得父进程的数据空间的副本。...在操作系统fork的实际实现中,基本都采用了写时复制技术,即在父/子进程试图修改数据空间之前,父子进程实际上共享数据空间;但是当父/子进程的任何一个试图修改数据空间时,操作系统会为修改的那一部分(内存的一页...虽然fork时,子进程不会复制父进程的数据空间,但是会复制内存页表(页表相当于内存的索引、目录);父进程的数据空间越大,内存页表越大,fork时复制耗时也会越多。

    1.2K20

    Apache运行机制剖析

    在Unix系统中,父进程通常以root身份运行以便邦定80端口,而 Apache产生的子进程通常以一个低特权的用户运行。User和Group指令用于配置子进程的低特权用户。...这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。 当并发量请求数到达MaxClients(如256)时,而空闲进程只有10个。apache为继续增加创建进程。...MaxSpareServers:设置了最大的空闲进程数,默认为10。如果空闲进程数大于这个值,Apache父进程会自动kill掉一些多余子进程。...这样,客户端无须等待新线程或新进程的建立即可得到处理。在Unix中,为了能够绑定80端口,父进程一般都是以root身份启动,随后,Apache以较低权限的用户建立子进程和线程。...如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。 StartServers:服务器启动时建立的子进程数,默认值是"3"。 ServerLimit:服务器允许配置的进程数上限。

    97610

    【linux】地址空间

    分页和虚拟地址空间 地址空间的本质就是内核中的一个结构体对象,子进程会把父进程的很多内核数据结构全拷贝一份(浅拷贝),当子进程尝试对变量进行修改时,我在物理内存重新开辟一块空间,新的物理地址放到页表当中...当一个进程调用 fork() 创建子进程时,操作系统原本需要复制整个进程的地址空间到子进程中。然而,通过使用写时拷贝技术,子进程最初会共享父进程的地址空间中的所有页,而不是物理上复制它们。...写时拷贝:这是一种优化技术,常用于 fork() 系统调用中。父进程和子进程最初共享相同的物理内存页,仅当其中一个进程尝试修改页时,操作系统才会为该进程创建这个页的副本。 4....页面修改检测:如果父或子进程想要写入某个页面时,写入操作试图改变只读页面会导致页错误(Page Fault)。...从该结构中,选择一个最合适的进程,过程是怎么的呢? 从0下表开始遍历queue[140] 找到第一个非空队列,该队列必定为优先级最高的队列 拿到选中队列的第一个进程,开始运行,调度完成!

    9810

    精讲Redis持久化前言一、Redis高可用概述二、Redis持久化概述三、RDB持久化四、AOF持久化五、方案选择与常见问题六、总结

    父进程执行fork操作创建子进程,这个过程中父进程是阻塞的,Redis不能执行来自客户端的任何命令 父进程fork后,bgsave命令返回”Background saving started”信息并不再阻塞父进程...父进程执行fork操作创建子进程,这个过程中父进程是阻塞的。...首先说明一下fork操作: 父进程通过fork操作可以创建子进程;子进程创建后,父子进程共享代码段,不共享进程的数据空间,但是子进程会获得父进程的数据空间的副本。...在操作系统fork的实际实现中,基本都采用了写时复制技术,即在父/子进程试图修改数据空间之前,父子进程实际上共享数据空间;但是当父/子进程的任何一个试图修改数据空间时,操作系统会为修改的那一部分(内存的一页...虽然fork时,子进程不会复制父进程的数据空间,但是会复制内存页表(页表相当于内存的索引、目录);父进程的数据空间越大,内存页表越大,fork时复制耗时也会越多。

    66050
    领券