我们一般在编写服务器的时候都希望能让服务器在后台运行,而且能记录下这个服务器的pid,防止一个进程重复启动。之前我的方案是自己使用fork函数,将服务器运行成后台模式;并且在启动之前去检查配置文件中指定的pid文件中是否能读出pid信息,并且在当前的ps aux中查找这个pid的进程是否还活着。这样来判定服务器是否已经启动了。当正常启动完毕之后,将会把当前进程的pid写入文件。这样就能防止重复启动了。从刚刚的描述中可以看出其实大多的服务器程序可能需要有以下几个需求:

需要后台运行

需要记录pid方便今后服务器信息的读取

需要防止服务器被错误的重复启动

其实在Linux的基础设施中有这样类似的命令来处理:

$daemon

有了这个活宝,可以减少自己去学习Linux那套daemon方式的编程。在写程序的时候直接实现自己的服务器主流程即可。这种减少掉自己代码中的平台相关的东西还是比较好。能让代码更加清晰。

描述

daemonize可以将一个命令运行成Unix的后台。后台程序是不需要借助终端或者登陆的shell运行在服务器上的,并且等待一些时间的出现,或者等待去执行一些规定的任务在一定周期内。一个典型的后台程序江湖:

关闭全部文件描述字(除开标准输出、输出和错误输出)

将工作目录设置成文件系统的root目录,确保它没有挂载任何其他的文件系统,预防它被卸载

重设他的umask

运行在后台(fork)

分离处理组(通常是一个shell),隔绝掉信号(如挂起信号HUP);

忽略掉全部中断的I/O信号

从中断分离控制权

处理任何SIGCLD信号

选项

-a

挂载到输出文件,而不是冲掉默认值。只有应用了-e and/or -o 被指定的情况。

-e

重定向输出标准错误到指定的文件中,替代/dev/null

-o

重定向输出标准到指定的文件中,替代/dev/null

-E name=value

增加环境变量给给后台程序。这个这个参数类型一定要是name=value格式。参数可以设置多次。

-c directory

定制运行命令前的目录。

-p pidfile

定制自己的pid存放位置。

-l lockfile

单实例启动时将会检查这个文件。

-u user

定制程序以谁的身份运行的。

-v

将会触发daemonize将自己程序的运行详细的日志输出到标准输出中。

注意事项

如果宿主操作系统提供了daemon库程序,daemonize 将会使用它。否则 daemonize将使用自己实现的daemon。这个选择是在编译期做的。

FreeBSD 5.0引入了daemon命令类似于这个命令,但是没有提供如此多的功能。

关于

Brian M. Clapper, bmc@clapper.org

daemonize Home Page: http://software.clapper.org/daemonize/

August 2006

实例

测试代码:

#include

#include

int main( int argn, char *argv[] )

{

int loop_count = 0;

while ( true ) {

loop_count ++;

if ( loop_count > 10 ) {

loop_count = 0;

}

std::this_thread::sleep_for(std::chrono::milliseconds(1000));

if ( loop_count == 5 ) {

std::cout << "is normalize output " << std::endl;

}

if ( loop_count == 9 ) {

std::cerr << "is error output" << std::endl;

}

}

return 0;

}

启动的shell

daemonize -a -e /home/abel/test_daemonize/error.log -o /home/abel/test_daemonize/output.log -p /home/abel/test_daemonize/daeminze.pid -l /home/ab el/test_daemonize/lockfile /home/abel/test_daemonize/test_daemonize -c mycfg.cfg

文件列表

test_daemonize]$ ls

daeminze.pid error.log launch.sh lockfile main.cpp main.o output.log SConstruct test_daemonize

pid文件内容

$ cat ./daeminze.pid

11520

日志文件

# output.log

is normalize output

is normalize output

# error.log

is error output

is error output

linux daemonize 命令,Linux守护进程运行命令daemonize相关推荐

  1. Linux守护进程运行命令daemonize

    我们一般在编写服务器的时候都希望能让服务器在后台运行,而且能记录下这个服务器的pid,防止一个进程重复启动.之前我的方案是自己使用fork函数,将服务器运行成后台模式:并且在启动之前去检查配置文件中指 ...

  2. 00005__Linux守护进程运行命令daemonize

    https://blog.csdn.net/lusic01/article/details/82226692

  3. linux 后台不挂断地运行命令

    linux 后台不挂断地运行命令 前段时间小编需要在服务器上跑数据,程序写完啦,遇到一个问题,怎么才能在linux服务器上运行,并且是放在后台运行,这样就不需要时刻盯着了,于是乎小编随便在网上找了一下 ...

  4. Linux系统的护花使者-----守护进程

    **************************************************************************************************** ...

  5. Linux -- 多进程编程之 - 守护进程

    内容概要 一.守护进程概述 二.守护进程创建 2.1.创建子进程,父进程退出 2.2.在子进程中创建新会话 2.2.1.进程组和会话期 2.2.2.setsid()函数说明 2.3.改变当前工作目录 ...

  6. 嵌入式linux系统下简单守护进程(daemon)的编写

    最近公司项目需要,需要在我们的嵌入式linux设备中创建一个守护进程,用于保护系统中的主进程,防止某些不可预期的意外导致主进程异常结束后,系统完全宕机没有任何反应,破坏用户体验感.但是,查阅诸多资料之 ...

  7. linux apache守护进程,Linux基础命令---httpd守护进程

    httpd httpd是apache超文本传输协议的主程序,它被设计成一个独立运行的守护进程.httpd会建立一个线程池来处理http请求. 此命令的适用范围:RedHat.RHEL.Ubuntu.C ...

  8. linux查看进程运行命令行参数,linux查看进程运行命令

    Linux系统下想要查看运行中的进程,那我们该使用那个命令呢?下面由学习啦小编为大家整理了linux查看进程运行的命令的相关知识,希望对大家有帮助. 1.linux查看进程命令详解 ps命令查找与进程 ...

  9. linux命令之查看进程运行动态库依赖及打开文件-lsof

    ldd命令可以看到程序依赖库,但是有的动态库是使用dlopen接口隐式加载的方式加载起来的,这个时候使用ldd命令是看不见的. 不过有另一个命令lsof,lsof命令可以看见运行中的进程加载了哪些动态 ...

最新文章

  1. 1.9 Java数组和字符串的相互转换
  2. python类_Python中的类
  3. python控制台清屏_Python Shell 怎样清屏?
  4. lvds接口屏线安装图解_五分钟让你学会液晶拼接屏安装方法
  5. Zookeeper本地安装配置(windows)
  6. Codeforces Round #511 (Div. 1) 题解
  7. Wannafly挑战赛22: C. 多项式(大整数)
  8. 设计模式之抽象状态模式
  9. window.requestAnimationFrame()的使用,处理更流畅的动画效果
  10. 使用爬虫下载x书视频
  11. MongoDB数据库可视化工具
  12. IAR在写结构体时不提示_U盘被写保护了以后怎么办?
  13. Maven by Example 1.7. Comparing Maven with Ant
  14. 租住南山的互联网大厂人:年入70万,睡城中村单间
  15. js实现鼠标滚轮缩放图片
  16. 电脑蓝屏怎么解决0x0000007b,解决电脑蓝屏问题
  17. 为什么越来越多的绘图员开始用云渲染来渲图?
  18. C语言程序设计(2018-2019学年第一学期测试卷)
  19. N 个Android 视频教程免费下载
  20. OpenCV第六篇:阈值函数

热门文章

  1. 特征点匹配——FAST特征点检测
  2. 中职计算机应用类资源公司,中职学校计算机应用专业教学资源库的建设
  3. clear Cache for google 浏览器一键清理缓存
  4. 游侠汽车宣布B+轮融资3.5亿美金 估值33.5亿美金
  5. Chinapex创略:“小数据”如何驱动数字营销新时代
  6. 这是三个最热门的梵文纹身设计...
  7. 学习笔记(02):8小时Python零基础轻松入门-实例和属性
  8. ios证书申请,最简单的申请方法
  9. Jmeter分布式集群
  10. 使用excel生成九九乘法表