多进程问题

一、概述

  孤儿进程:父进程退出,而它的子进程仍在运行,那么这些子进程将成为孤儿进程,孤儿进程将被init进程(进程id)为收养,并由init进程对它们完成状态的收集工作

  僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程

二、如何避免出现僵尸进程

  • 通过signal(SIGCHLD, SIG_IGN)通知内核对子进程的结束不关心,由内核回收
  • 通过SIGCHLD的注册函数来处理信号,如果一下子很多信号发出,那么会有丢失信号的问题,因为内核发信号不排队....
  • 孤儿进程的方式,通过fork setsid实现

三、Daemon守护进程

  1. fork子进程、然后父进程退出,这已经构成了基本的daemon,但子进程还在父进程的回话里面
  2. 子进程调用setsid,使子进程成为新的会话组长,但新的会话组长可申请控制终端
  3. 再次fork一个子孙进程,干掉子进程,保留孙子进程
  4. 切换工作目录,关闭stdin\stdout\stderr的句柄,umask  
时间: 2024-09-12 10:09:27

多进程问题的相关文章

PHP CLI模式下的多进程应用分析

PHP在很多时候不适合做常驻的SHELL进程, 他没有专门的gc例程, 也没有有效的内存管理途径. 所以如果用PHP做常驻SHELL, 你会经常被内存耗尽导致abort而unhappy 而且, 如果输入数据非法, 而脚本没有检测, 导致abort, 也会让你很不开心. 那? 怎么办呢? 多进程-. 为什么呢? 优点: 1. 使用多进程, 子进程结束以后, 内核会负责回收资源 2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 3. 一个常驻主进程, 只负

PL/SQL中的多进程通信技术简介

进程 PL/SQL是基于Oracle的一个主流应用程序编程语言,它的特点是将SQL语句与过程化程序开发语言相结合,以实现更为复杂的商业逻辑.本文主要就其中多进程通信进行讨论. 显然,多进程技术是用来提高应用的并发性,进而提高整个系统的执行效率,那么如何在PL/SQL中实现多进程的通信呢?其实,PL/SQL其设计的初衷主要是增强SQL语句的功能,而没有考虑到其他编程语言的高级功能,所以在PL/SQL中实现多进程通信只能借助于Oracle提供的两个开发包:DBMS_PIPE和DBMS_ALERT.

PHP中的(伪)多线程与多进程

多线程|进程  已经因为没怎么需要,所以没有查这个的资料.最近有一个项目却是需要这样子的功能.     查看了PHP的手册和他人的例子,了解到基本的两种方法: (伪)多线程:借助外力    利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序.    以下转载自:http://www.laikan8.com/21/118472.html     QUOTE:我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的. 也就是说可以同时让多人一起访问.

多进程应用帮助PHP解决难题

PHP在很多时候不适合做常驻的SHELl进程, 他没有专门的gc例程, 也没有有效的内存管理途径. 所以如果用PHP做常驻SHELL, 你会经常被内存耗尽导致abort而unhappy PHP在很多时候不适合做常驻的SHELl进程, 他没有专门的gc例程, 也没有有效的内存管理途径. 所以如果用PHP做常驻SHELL, 你会经常被内存耗尽导致abort而unhappy. 而且, 如果输入数据非法, 而脚本没有检测, 导致abort, 也会让你很不开心. 那? 怎么办呢? 呵呵, 别着急, 多进程

ASP.Net应用程序的多进程模型

asp.net|程序|进程 尽管ASP.NET屏蔽了很多复杂性, 但在编写ASP.NET应用的时候,我们还是应当时刻留意:我们的代码始终是工作在多进程.多线程的运行环境下的.因此,我们在处理静态变量.全局变量时一定要警惕.同时,我们在往Session中存东西时,也需要考虑当Session状态以进程外服务方式提供时,保存的对象能否跨越进程边界的问题. (点击图片放大)

多进程浏览器下如何调试ActiveX插件

概述: 现在主流的浏览器都是多进程浏览器,这却给ActiveX插件的调试带来了很大的不便! 最近在使用VS2010开发ActiveX插件,由于要在真实的浏览器环境下调试, 发现在附加到进程时想找到真正的宿主进程比较麻烦! 于时想到了一个工具"Process Explorer",使用它很容易就可以找到真正的宿主进程. 使用方法: 打开"Process Explorer",点击"Find Handle or DLL"按钮,打开"Proces

PHP CLI模式下的多进程应用

PHP在很多时候不适合做常驻的SHELl进程, 他没有专门的gc例程, 也没有有效的内存管理途径.所以如果用PHP做常驻SHELL, 你会经常被内存耗尽导致abort而unhappy. 而且, 如果输入数据非法, 而脚本没有检测, 导致abort, 也会让你很不开心. 那? 怎么办呢? 呵呵, 别着急, 多进程来帮您! 那,这是为什么呢? 优点: 1.使用多进程, 子进程结束以后, 内核会负责回收资源 2.使用多进程,子进程异常退出不会导致整个进程Thread退出.父进程还有机会重建流程. 3.

借助两个开发包在PL/SQL中实现多进程通信

PL/SQL是基于Oracle的一个主流应用程序编程语言,它的主要特点是将SQL语 句与过程化程序开发语言相结合,以实现更为复杂的商业逻辑.本文主要就其中 多进程通信进行讨论. 显然,多进程技术是用来提高应用的并发性,进而提高整个系统的执行效率, 那么如何在PL/SQL中实现多进程的通信呢?其实,PL/SQL其设计的初衷主要是增 强SQL语句的功能,而没有考虑到其他编程语言的高级功能,所以在PL/SQL中实现 多进程通信只能借助于Oracle提供的两个开发包:DBMS_PIPE和DBMS_ALE

Linux多任务编程(六) 编写多进程程序及其代码

实验目的 通过编写多进程程序,熟练掌握fork().exec().wait()和waitpid()等函数的使用,进一步 理解在Linux中多进程编程的步骤. 实验内容 该实验有3个进程,其中一个为父进程,其余两个 是该父进程创建的子进程,其中一个子进程运行"ls -l"指令,另一个子进程在暂停5s后异常退出.父进程 先用阻塞方式等待第一个进程的结束,然后用非阻塞方式等待另一个子进程的退出,待收集到第2个子进程结 束的消息后,父进程就返回. 实验步骤 该实验的流程图如下 实验源代码 先看

Linux下的多进程间共享资源的互斥访问

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> #include <pthread.h> pthread_mutex_t* g_mutex; //创建共享的mutex void init_mutex(void) { int ret; //g_mutex一定要是进程间可以共享的,否则无法