linux 多进程并发服务__关于子进程回收的方法

Posted 雁北

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 多进程并发服务__关于子进程回收的方法相关的知识,希望对你有一定的参考价值。

以TCPServ 服务程序来说:

1)父进程:负责系统初始化,以及监听(listen),接受连接请求(accept);其中accept 默认阻塞调用。

2)每接受一个连接请求,动态新建(fork)一个子进程,任务完成或客户端断开,服务子进程需要退

  出并收回系统资源。

3)根据linux的设计子进程的收回需要父进程参与(wait调用),而此时附进程主要服务工作在监听

  客户端连接请求,同时阻塞在(accept)调用,所以父进程自身是无法"分身"去做子进程回收调用。

4)现在的问题在于如何找到父进程的一个服务入口来完成进程回收调用。

  方法有2:

  1)利用信号机制,由操作系统产生软中断进入进程信号服务程序,执行子进程的回收调用。

    在附进程(signal/sigaction)注册SIGCHILD信号,在信号处理函数中执行waitpid调用。

    疑问:信号机制可靠吗?特别是应对大频率高负载的动态请求响应场景。

  2)在父进程中启动一个新的独立线程pthread,专门负责执行回收调用,此时使用wait阻塞

    调用比较合适,如果使用waitpid需要不停的循环等待。注意没有子进程时wait调用立即

    返回失败。(父进程在fork子进程时候,可以做一个登记).

5)在很多情况下可以考虑用多线程并发代替多进程并发,省去了很多问题。

以上是关于linux 多进程并发服务__关于子进程回收的方法的主要内容,如果未能解决你的问题,请参考以下文章

python_并发编程——多进程的第二种启动方式

49_并发编程-线程-守护进程

python基础-并发编程02

百万年薪python之路 -- 并发编程之 多进程二

54_并发编程-线程-守护线程

进程对象的其他方法守护进程使用多进程实现 socket tcp协议 server端的并发(抢票程序)队列进程之间的通信(IPC)