zoukankan      html  css  js  c++  java
  • linux的deamon后台运行

    有的时候需要将程序一直跑在后台,比如一些服务类代码,或者一些监控类代码。使用deamon是正确的一种思路。

    以前我们在看《unix环境高级编程》的时候,有专门的整章详细介绍如何编写一个后台daemon程序(精灵程序),主要涉及到创建会话组,切换工 作目录,设置文件屏蔽字,关闭不必要的描述符等多个操作。这些操作对于每一个后台程序来说都是类似的。
    在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下
    int daemon (int __nochdir, int __noclose);
    如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入,输出和标准错误都重定向到/dev /null。
    经过这个函数调用后的程序将运行在后台,成为一个daemon程序,而linux下大多的服务都是以此方式运行的。
    我们来看一个简单的例子。例如编写例子程序test.c
    #include <unistd.h>
    #include <stdio.h>

    int do_sth()
    {
    //Add what u want
    return 0;
    }
    int main()
    {
    daemon(0,0);
    while ( 1 )
    {
    do_sth();
    sleep(1);
    }
    }
    编译并运行
    [leconte@localhost daemon]$ gcc -o test test.c

    [leconte@localhost daemon]$ ./test
    程序进入了后台,通过ps查看进程情况,可以看到进程的父进程id为1,即init进程
     
    用lsof查看test进程所打开的文件,可以看到文件描述符0,1,2都被重定向到/dev/null
    并且能够看到,进程的当前工作目录(cwd)为根目录/,daemon函数已经帮我们完成了daemon化的过程,接下来我们只需要关注于程序功能 的实现了。

  • 相关阅读:
    surfaceView和Camera配合进行摄像头的预览
    Android中SurfaceView的使用详解
    Java 图片与byte数组互相转换
    Android的GridView和Gallery结合Demo
    AlertDialog dismiss 和 cancel方法的区别
    HttpClient4.0
    IntentFilter
    ViewPagerindicator 源码解析
    android背景平铺方式 tileMode
    android requestWindowFeature使用详解
  • 原文地址:https://www.cnblogs.com/kb342/p/5968869.html
Copyright © 2011-2022 走看看