• 守护进程和僵尸进程


    僵尸进程:在子进程未退出的情况下,父进程退出,子进程被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. }
  • 相关阅读:
    hdu 1015 Safecracker 暴力搜索
    hdu 1239 Calling Extraterrestrial Intelligence Again 枚举
    hdu 3747 Download 菜鸟杯
    hdu 3744 A Runing Game 菜鸟杯
    Request.QueryString 使用时候应该注意的地方。
    图片 上一张 下一张 链接效果
    ASP.NET 输出缓存的移除
    RSS 消费
    RSS 订阅功能的实现
    创建型模式单件模式(1)
  • 原文地址:https://www.cnblogs.com/CHYI1/p/5400623.html
Copyright © 2020-2023  润新知