Linux下调用fork或system启动子进程的信号和资源释

最近一段时间,公司的网管系统二期优化需要新增功能,实现对网管客户端程序进行保护的监控脚本的自动更新及保护进程的监控告警。网管客户端程序分为两部分:客户端GatherClient及保护进程gatherclient_daemon.py,其中保护脚本由Python编写,主要功能是实现客户端进程崩溃或意外被杀死后的自动恢复。目前网管系统支持Windows和Linux平台。下面主要讲述在Linux下实现遇到的问题。

为了实现上述的两功能,需要解决以下两方面问题:

1、获取保护脚本进程是否存在。

对Python脚本保护进程的实时监控 ,需要获取当前系统的进程信息,以判定该进程是否存活。由于py脚本均是由Python二进制模块以参数的形式加载并产生进程 ,而在系统中的进程名均为python,这样若系统存在其他py脚本在运行,则无法区分,不过这个问题可能通过获取进程的参数信息来区分所对应的py脚本(Windows和Linux均可获取进程参数信息),此处不细述。

2、py脚本的自动更新及加载。

当网管系统服务端有脚本gatherclient_daemon.py的更新时,需要客户端程序能够自动下载脚本,并完成对更新后的py脚本的加载启动。而我们的客户端由于公司各游戏业务的服务器物理上分布很分散,均为远程操作,当客户端程序有版本更新时,会自动下载新程序文件,然后客户端自动退出,由保护进程gatherclient_daemon.py负责启动更新后的客户端进程,因此优先更新py文件并保证正常重新启动对GatherClient的自动更新功能显得尤为关键。

Linux下启动一个新进程的方法有:调用fork( ),system( )以启动子进程的方式实现,其中system( )的系统内部实现也是调用fork( )及Waitpid等。这里就涉及到Linux下的父子进程产生及资源的继承关系的问题。

关于fork( )产生子进程的理解,可看下面一段示例及解析:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/23258.html