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

  1. 需要后台运行
  2. 需要记录pid方便今后服务器信息的读取
  3. 需要防止服务器被错误的重复启动

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

$ daemonize

有了这个活宝,可以减少自己去学习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 <iostream>
#include <thread>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相关推荐

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

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

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

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

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

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

  4. linux 命令启动菜单栏,Linux守护进程的启动方法

    这篇文章主要为大家详细介绍了Linux守护进程的启动方法,本文介绍如何将一个 Web 应用,启动为守护进程,感兴趣的小伙伴们可以参考一下 "守护进程"(daemon)就是一直在后台 ...

  5. Linux 命令详解(六)Linux 守护进程的启动方法

    Linux 守护进程的启动方法 http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html

  6. 笔记整理--Linux守护进程

    Linux多进程开发(三)进程创建之守护进程的学习 - _Liang_Happy_Life__Dream - 51CTO技术博客 - Google Chrome (2013/10/11 16:48:2 ...

  7. .NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇

    Linux守护进程是Linux的后台服务进程,相当于Windows服务,对于为Linux开发服务程序的朋友来说,Linux守护进程相关技术是必不可少的,因为这个技术不仅仅是为了开发守护进程,还可以拓展 ...

  8. .NET跨平台实践:用C#开发Linux守护进程

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  9. 深入理解Linux守护进程

    深入理解Linux守护进程Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daem ...

最新文章

  1. 04-dispatch_group
  2. Oracle 中多个字段显示成一列
  3. Git tag 打标签
  4. 苹果7信号天线内部位置_新专利显示未来Apple Watch Wi-Fi及无线天线或将嵌入显示屏中...
  5. svn增量打包部署_持续集成、持续交付、持续部署(CI/CD)简介
  6. 校园网搭建案例(课堂总结)
  7. vue-router进阶:路由使用归纳、路由导航守卫、导航守卫解析流程、
  8. switch全部游戏列表_敢把游戏当教材,免费提供给学生!EA今年将推出7款NS作品!...
  9. C语言和设计模式(迭代器模式)
  10. [转]android:clipToPadding和android:clipChildren
  11. cad结构字体_AutoCAD字体选择:如何快速选中gbcbig.shx通用字体
  12. Adobe Acrobat reading untagged document window pops up
  13. java里seri_关于serilization
  14. 天眼查python_GitHub - wagaman/Python-Tianyancha: 天眼查爬虫
  15. Microsoft fsx 飞行模拟器 SDK的一些心得
  16. 用计算机怎么打出X,x的平方怎么在电脑上打出来(常见数学符号打法
  17. MySQL 数据库 source 命令详解及实例
  18. 【智力题】小环绕大环
  19. RabbitMQ系列3之运行和Rabbit服务
  20. C#: 星座星盘计算算法

热门文章

  1. Pyecharts(三) —— 星巴克门店分布
  2. 分析师的嘴,骗人的鬼?年薪百万的券商分析师靠谱吗?Python量化大数据给你答案!| 邢不行
  3. @Async注解的坑,小心
  4. 在Linux上运行黑魂3服务器端
  5. java 数组 内存_Java 中数组的内存分配
  6. 苹果测试机发现保存不了图片怎么办?
  7. 微信小程序搜索框自动补全功能
  8. 学生出勤率平时成绩java_学员考勤、作业规定及平时成绩评定办法
  9. IOS 下 -webkit-overflow-scrolling 引发的 bug
  10. 编写程序,从键盘上输入你的体重(单位公斤)和身高(单位米)计算你的身体质量指数BMI。