zoukankan      html  css  js  c++  java
  • 守护进程和僵尸进程

    僵尸进程:在子进程未退出的情况下,父进程退出,子进程被init进程接管,但是子进程将不会正常退出,退出后也不会被收回该进程的资源,所以这种情况应该被避免,否则数量多了以后系统资源将被消耗完.为了避免这种情况可以是用vfork函数进行子进程的派生,或者在父进程中使用一下函数来等待子进程的退出:

    头文件<sys/types.h><sys/wait.h>
    int wait(int *status);//暂停目前进程的执行,直到有信号来激活或者子进程执行结束
    int waitpid(int pid,int *status,int options);
    //等待pid代表的子进程的执行结束,pid = -1,相当于wait。等待任何子进程

    ---------------------------------------------------------------------------------------------------------

    守护进程:一直在后台运行,父进程为init,和僵尸进程类似,不同的是守护进程多为服务进程,是需要一直提供服务所以不能退出.

    守护进程的一般编写步骤:

    1. 脱离控制终端(父进程),使父进程为init
    2. 禁止进程重新打开控制终端
    3. 关闭文件描述符(从父进程继承了文件描述符,最好先进行关闭,避免不必要的系统资源的浪费)
    4. 更改工作目录(避免工作目录被卸载)
    5. 重设文件创建掩码(避免创建文件的时候权限和我们所需要权限不一致)
    1. int c = 0;
    2. int pid = fork();
    3. if(pid > 0){         //退出父进程,使其父进程为init
    4. exit(0);
    5. }
    6. if(pid < 0){        //子进程创建失败 退出
    7. exit(1);
    8. }
    9. for(;c < 101122;c++){        //关闭文件描述符
    10. close(c);
    11. }
    12. chdir("/");                         //更改工作目录
    13. umask(0);                        //重新设置文件创建掩码
    14. while(1){//死循环让其一直在后台运行
    15. //编写该进程所需要做的工作
    16. }
  • 相关阅读:
    JDK的KEYTOOL的应用,以及签署文件的应用(原创)
    2017年Android SDK下载安装及配置教程(附带原文地址)
    C# 使用 MemoryStream 将数据写入内存
    iOS7下隐藏status bar的详细研究
    如何布局包含Image和Title的UIButton
    自定义iOS7导航栏背景,标题和返回按钮文字颜色
    UIRefreshControl自动刷新
    SDWebImage缓存图片的机制(转)
    iOS6的旋屏控制技巧
    IOS开发之----NSDictionary,JSON和XML互相转换
  • 原文地址:https://www.cnblogs.com/CHYI1/p/5400623.html
Copyright © 2011-2022 走看看