1、 守护进程是生存期长的一种进程。
2、它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。
3、他们常常在系统引导装入时启动,在系统关闭时终止。
4、unix系统有很多守护进程,大多数服务器都是用守护进程实现的。
5、比如,网络服务inetd、Web服务http等。
6、同时,守护进程完成许多系统任务。
7、比如,作业规划进程crond、打印进程lqd等。
8、这里主要说明守护进程的进程结构,以及如何编写守护进程程序。
9、因为守护进程没有控制终端,所以我们还要介绍在守护进程运行时错误输出的方法。
10、守护进程及其特性 守护进程重要的特性是后台运行。
11、在这一点上,DOS下的常驻内存程序TSR与之相似。
12、其次,守护进程必须与其运行前的环境隔离开来。
13、这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。
14、这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。
15、后,守护进程的启动方式有其特殊之处。
16、它可以在系统启动时从启动脚本/etc/rc.d中启动,可以由inetd守护进程启动,可以有作业规划进程crond启动,还可以由用户终端(通常是shell)执行。
17、总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。
18、因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。
19、如果大家对进程的认识比较深入,就对守护进程容易理解和编程了。
20、首先我们来察看一些常用的系统守护进程,看一下他们和几个概念、进程组、控制终端和对话期有什么联系。
21、ps命令打印系统中各个进程的状态。
22、该命令有多个选择项,有关细节请参考系统手册。
23、为了察看所需的信息,执行、ps–axj PPIDPIDPGIDSIDTTYTPGIDSTATUIDTIMECOMMAND 0100?-1S00、04init 1211?-1SW00、00(keventd) 1311?-1SW00、00(kapm-idled) 0411?-1SWN00、00(ksoftirqd_CPU0) 0511?-1SW00、00(kswapd) 0611?-1SW00、00(kreclaimd) 0711?-1SW00、00(bdflush) 0811?-1SW00、00(kupdated) 1911?-1SW0){ printinfo("fork1ok。
24、",INFOSCREEN) exit(OKEXIT)//退出父进程,摆脱shell的控制 } pid=getpid()//获得子进程自身的id lockfd=fopen(PIDFILE,"w")//以下是将pid写入文件 if(lockfd。
25、=NULL){ fprintf(lockfd,"%d/n",pid) fclose(lockfd) }//写入pid if(getsid(0)。
26、=pid){//创建新的会话期 if(setsid()<0){ printinfo("backupdaemonsetsiderror。
27、",INFOERROR) perror("setsid") } } if(pid=fork()){//再次生成子进程,这时候是孙子进程 exit(0)//退出上一代进程 }elseif(pid<0){ exit(1) } close(1)//关闭文件 close(2) chdir(rundir)//改变运行的目录 umask(022)//改变文件权限 } 守护进程的错误输出守护进程不属于任何终端,所以当需要输出某些信息时,它无法像一般程序那样将信息直接输出到标准输出和标准错误输出中。
28、我们很大时候也不希望每个守护进程将它自己的出错消息写到一个单独的文件中。
29、因为对于系统管理人员而言,要记住哪一个守护进程写到哪一个记录文件中,并定期的检查这些文件,他一定会为此感到头疼的。
30、所以,我们需要有一个集中的守护进程出错记录机制。
31、目前很多系统都引入了syslog记录进程来实现这一目的。
32、自伯克利开发了BSDsyslog并广泛应用以来,BSDsyslog机制被大多数守护进程所使用。
33、我们下面介绍BSDsyslog的用法。
34、有三种方法产生记录消息、1内核例程可以调用log函数。
35、任何一个用户进程通过打开和读/dev/klog设备就可以读取这些消息。
36、因为我们无意编写内核中的例程,所以不再进一步说明此函数。
37、2大多数用户进程(守护进程)调用syslog函数以产生记录消息。
38、我们将在下面说明其调用序列。
39、这使消息发送至Unix域数据报套接口/dev/log。
40、3在此主机上,或通过TCP/IP网络连接到此主机的某一其他主机上的一个用户进程可将记录消息发向UDP端口514。
41、注意、syslog函数并不产生这些UDP数据报——它们要求产生此记录消息的进程具有显式的网络编程。
42、通常,syslog守护进程读取三种格式的记录消息。
43、此守护进程在启动时读一个配置文件。
44、一般来说,其文件名为/etc/syslog.conf,该文件决定了不同种类的消息应送向何处。
45、例如,紧急消息可被送向系统管理员(若已登录),并在控制台上显示,而警告消息则可记录到一个文件中。
46、该机制提供了syslog函数,其调用格式如下 #include voidopenlog(char*ident,intoption,intfacility) voidsyslog(intpriority,char*format,……) voidcloselog() 调用openlog是可选择的。
47、如果不调用openlog,则在第一次调用syslog时,自动调用openlog。
48、调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。
49、调用openlog使我们可以指定一个ident,以后,此ident将被加至每则记录消息中。
50、ident一般是程序的名称(例如,cron,inetd等)。
51、option有4种可能、LOG_CONS若日志消息不能通过Unix域数据报发送至syslog,则将该消息写至控制台。
52、LOG_NDELAY1立即打开Unix域数据报套接口至syslog守护进程,而不要等到记录第一消息。
53、通常,在记录第一条消息之前,该套接口不打开。
54、LOG_PERROR除将日志消息发送给syslog外,还将它至标准出错。
55、此选项仅由3BSDReno及以后版本支持。
56、LOG_PID每条消息都包含进程ID。
57、此选项可供对每个请求都fork一个子进程的守护进程使用。
58、在openlog中设置facility参数的目的是让配置文件可以说明,来自不同设施的消息以不同的方式进行处理。
59、如果不调用openlog,或者以facility为0来调用它,那么在调用syslog时,可将facility作为priority参数的一个部分进行说明。
60、调用syslog产生一个记录消息。
61、其priority参数是facility和level的组合,它们可选取的值分别列于下面。
62、level值按优先级从高级到低按序排列。
二、如何加载系统守护进程在MacOS问题,怎么解决1、守护进程daemon,是生存期较长的一种进程。
2、它们常常在系统自举时启动,仅在系统关闭时才碧拦终止。
3、因为它们没有控制终端,所以说它们是在后台运行的。
4、UNIX系统有很多守护进程,它们执行日常事务活动。
5、r系统自举r自举(bootstrapping)一词来自于人都是靠自身的“自举”机构站立起来的这一思想。
6、计算机必须具备自举能力将自己所有的元件激活,以便能完成加载操作系统这一目的,然后再由操作系统承担起那些单靠自举代码无法完成的更复杂的任务。
7、r自举只有两个功能、加电自检和昌芹磁盘引导。
8、r加电自检、当我们按下计算机电源开关时,头几秒钟机器似乎什么反应也没有,其实,这时的计算机正在进行加电自检,以断定它的所有元件都在正确地工作。
9、如果某个元件有故障,显示器上就会出现报警提示信息(如果显示器也不能正常工作,则以一串嘟嘟声来报警)。
10、由于大多数计算机工作可靠,加电自检报警罕见。
11、r磁盘引导、查找装有操作系统的磁盘驱动器。
12、从磁盘加载操作系统的原因有一是操作系统升级简单容易,二是使用户拥有选择操作系统的自由。
13、r当加电自检和磁盘引导完成时,自举操作就启动一个读写操作系统文件和将它们复制到随机存储器中的过程,此时的机器才是真正意义上的计算机。
14、计算机的启动可以有冷启动和热启动两种方式,它们之间的差别是热启动不进行机器的自检(机器本身配置的检查与测试),当计算机在使用过程中由于某些原因造成死机时,可以对计算机进行热启动处理。
15、rr守护进程的概念r通过psaxj命令可以查看到守护进程、r参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息。
16、rr代耐慧毕码如下、PPIDPIDPGIDSIDTTYTPGIDSTATUIDTIMECOMMANDr0111?-1Ss00、01/sbin/initr0200?-1S<00、00(kthreadd)r2300?-1S<00、00(migration/0)r2400?-1S<00、00(ksoftirqd/0)...r1237323732373?-1S。
三、c 如何编写程序实现进程保护1、为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。。
2、进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:。
3、进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:。
4、引入方法代码。
5、守护进程实例包括两部分:主程序test.c和初始化程序init.c。主程序每隔一分钟向/tmp目录中的日志test.log报告运行状态。初始化程序中的init_daemon函数负责生成守护进程。读者可以利用init_daemon函数生成自己的守护进程。。
6、 test.c清单。
四、Android保活系列之——双进程守护1、近期跳槽到玩加电竞,加之英雄联盟云顶之弈排位模式的推出,导致个人精力有限没有时间和心情去写相关的博客。
2、在Context中提供了bindService的方法绑定服务是客户端--服务器接口中的服务器。
3、组件和服务进行绑定后,可以发送请求、接收响应、执行进程间通信(IPC)。
4、这里的服务器模型不同于网络C-S模型而是针对于Android应用不同的功能进行进程划分,例如提供视频播放的进程我们可以把它当做视频播放服务器,我们UI层属于客户端,客户端想要调用视频播放,需要用IPC方式通过bind服务的方式调用视频播放服务。
5、(PS、如果大家对IPC不太熟悉可以参考我的其他文章Android跨进程通信技术的使用及原理)客户端可以通过调用bindService()绑定到服务。
6、调用时,必须提供ServiceConnection的实现,后者会监控与服务的连接及销毁。
7、借助bindService的机制,我们可以在主进程创建时创建一个守护进程,并监听守护进程的连接及销毁,再守护进程bindService中绑定主进程,这样即使进程因为锁屏、内存等问题杀掉后,也会被守护进程拉起,这就是Android中双进程守护的概念。
8、当然早在PC时期,网吧的计时系统就使用了双进程守护机制,防止被恶意杀掉。
9、实现方式就不写了,网络上一搜一堆,这里给出一篇文章Android双进程守护写的中规中矩,如果不清楚如何实现可以看一下。
10、谷歌官方0变更当版本>0时,如果需要在后台启动服务需要调用startForegroundService。
11、并且在serivce中onCreate方法必须在5秒内调用startForeground,向通知栏发一个通知告知用户你的App正在后台运行,否则就会抛出异常0通知适配保活分两种、拉活、保活拉活和保活是相辅相成的。
12、在0版本以后的机型上,系统杀应用是按照进程组杀的,会直接导致双进程守护失效。
13、那么因此就不使用双进程了么?低版本双进程守护是依然亲测好使。
14、双进程守护可以和后面讲到的账号同步、外部PUSH、JobScheduler相结合,可以规避开系统杀进程组的问题。
15、使双进程守护功能可以兼容高版本。
16、讲的有些笼统,我寻思的发Dome、写例子,但这样解决不了根本问题,只有懂得了思路,了解了什么是双进程守护,才能在开发中随机应变。
17、只能说Android水太深,大家需要细心细心再细心。
五、C# 中如何编写守护进程 服务?1、近期跳槽到玩加电竞,加之英雄联盟云顶之弈排位模式的推出,导致个人精力有限没有时间和心情去写相关的博客。
六、求助,delphi如何让程序关闭后又打开自己1、需要编写另外一个程序(一般叫守护进程)来实现。
2、原理是守护进程定时判断程序是否已经启动,如果没启动,则启动程序。
七、安卓系统的app,我需要它一直在后台运行,我该怎么加锁才可以 关闭其1、需要编写另外一个程序(一般叫守护进程)来实现。
八、delphi 如何实现进程隐藏或防杀?(完整且上机切实有效!!)1、提高优先级这个办液搭法对普通应用而言,应该只是降低了应用被杀死的概率,但是如果真的被系统回收了,还是无法让应用自动重新启动!让service.onStartCommand返回START_STICKY通过实验发现,如果在adbshell当中kill掉进程闹拿拿模拟应用被意外杀死的情况(或者用360手机卫士进行清理操作),如果服务的onStartCommand返回START_STICKY,在eclipse的进程管理器中会发现过一小会后被杀死的进程的确又会出现在任务管理器中,貌似这是一个可行的办法。
九、韩天峰的博客 03 PHP服务器端守护进程怎么实现MySQL连接池1、易于上手和掌握。
2、sql写在xml里,便于统一管理和优化。
3、解除sql与程序代码的耦合。
4、提供映射标签,支持对象与数据库的orm字段关系映射提供对象关系映射标签,支持对象关系组建维护提供xml标签,支持编写动态sql。
转载请注明出处阿文说说网 » 如何实现守护进程【守护进程】