有的时候需要将程序一直跑在后台,比如一些服务类代码,或者一些监控类代码。使用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化的过程,接下来我们只需要关注于程序功能 的实现了。

linux的deamon后台运行的更多相关文章

  1. Linux nohup 程序后台运行

    &方式: Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台:          /usr/local/my ...

  2. Linux jar包 后台运行

    Linux 运行jar包命令如下: 方式一: java -jar shareniu.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? ...

  3. Linux 下在后台运行进程:nohup,setsid,& 以及 tmux

    参考: Linux 技巧:让进程在后台可靠运行的几种方法 ssh 登录了远程服务器时,如果在前台运行耗时较长的任务, 当 ssh 掉线或关闭窗口时会导致命令停止运行. hup 与 nohup 当用户注 ...

  4. 让linux远程主机在后台运行脚本

    后台挂起:python xxx.py & 在脚本命令后面加入"&"符号就可以后台运行.结束进程:kill -9 sidps -ef | grep ... 查询sid

  5. linux 程序实现后台运行

    先上代码: getopt函数获取参数  -d 控制台控制运行  -D 后天运行  -h 调用show_help函数. 编译命令 gcc -g -W test.c -o test 注意后台运行 ./te ...

  6. linux 系统的后台运行

    后台运行:nohup 程序名 & 杀死后台 ps -ef|grep 名称 kill -9 id(查出的程序id)

  7. MongoDB Linux 安装配置 后台运行

    介绍安装的文档很多,可以参考这篇: http://www.mkyong.com/mongodb/how-to-install-mongodb-on-mac-os-x/ 安装完后你可能会碰到的2个问题. ...

  8. linux 标准输出和后台运行

    一.后台运行程序 至需要在命令后面加上一个 & 即可 # command & 例如: python test.py & 二.标准输出.标准错误输出 # command > ...

  9. Linux nohup和&后台运行,进程查看及终止,进程信息输出,控制台信息输出

    nohup和&后台运行,进程查看及终止   1.nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg … ] [ & ] 无论是否将 nohup 命令的输 ...

随机推荐

  1. 压缩感知Compressive sensing(一)

    compressive sensing(CS) 又称 compressived sensing ,compressived sample,大意是在采集信号的时候(模拟到数字),同时完成对信号压缩之意. ...

  2. python库之threading

    This module constructs higher-level threading interfaces on top of the lower level python库之_threadmo ...

  3. SSH框架(2)

    个人分类: Java面试   Struts 谈谈你对Struts的理解. 答: 1.struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为Acti ...

  4. 无线网破解 跑字典 EWSA使用教程

    当我们用奶瓶抓到包,就可以再windowsxp&7&8下跑字典 工具/原料 EWSA4.0完美汉化破解版 字典 方法/步骤 1.打开程序 2.导入握手包 3.配置EWSA ,1.选项 ...

  5. python3 csv数据读入/写出

    这是读入 1 import csv 2 #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open() 3 with open("XXX ...

  6. java多线程:synchronized和lock比较浅析

    转载:http://www.toutiao.com/a6392135944652587266/?tt_from=weixin&utm_campaign=client_share&app ...

  7. 【BZOJ2850】巧克力王国 KDtree

    [BZOJ2850]巧克力王国 Description 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜 欢过于甜的巧克力.对于每一块巧克力,我们设 ...

  8. python 的os的总结

    转:http://www.cnblogs.com/BeginMan/p/3327291.html

  9. c#同步調用異步(async)方法【記錄用】

    使用RestSharp中的異步方法ExecuteTaskAsync<T>編寫寫了一個異步方法,功能很簡單:異步調用API,返回結果,假設為GetAccessToken,方法簽名假設如下: ...

  10. mac book 华为C8815不能debug

    最近遇到一个头疼的问题,华为c8815机器,死活不能在mac下debug,虽然最终是能够debug了,但是走了很多弯路. (1)以为是mac的系统问题,所以重装了系统.为了重装系统,备份资料,用快盘上 ...