1.守护进程
守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。
2.让程序只运行一次
如果让程序只运行一次,有很多方法,此处的一种方法是创建一个名字古怪的文件(保证不跟系统文件或其他文件重名),判断文件存在则让程序不再运行且提示程序正在运行,如果不存在则可以运行。
3.测试代码
此代码额外添加了系统LOG,记录操作的信息。
#include
#include
#include
#include
#include
#include
#include
#include
#define FILE "/var/cxl_single_file"
// 函数声明
void create_daemon(void);
void delete_file(void);
int main(int argc, char **argv)
{
int fd = -;
// 打开LOG系统
openlog(argv[], LOG_PID | LOG_CONS, LOG_USER);
// 打开文件,不存在则创建,存在则报错误提示
fd = open(FILE, O_RDWR | O_TRUNC | O_CREAT | O_EXCL, );
if ( fd < )
{
if ( errno == EEXIST )
{
printf("%s is running...\n", argv[]);
_exit(-);
}
}
syslog(LOG_INFO, "Create file success!");
// 注册进程清理函数
atexit(delete_file); // Kill -9 PID 后 此函数没有运行
close(fd);
closelog();
// 创建守护进程
create_daemon();
while ();
return ;
}
// create_daemon() 创建守护进程
void create_daemon(void)
{
int i = , cnt = ;
pid_t pid = -;
pid = fork();
if ( - == pid)
{
perror("fork");
_exit(-);
}
if ( pid > )
{
// 子进程等待父进程退出
_exit();
}
/* 此处是子进程执行 */
// setsid() 子进程创建新的会话期,脱离控制台
pid = setsid();
if ( - == pid )
{
perror("setsid");
_exit(-);
}
// chdir() 调用此函数将当前工作目录设置为/
chdir("/");
// umask() 设置为0以取消任何文件权限屏蔽
umask();
// 关闭所有文件描述符
// sysconf() 获取当前系统中文件描述符的最大数目
cnt = sysconf(_SC_OPEN_MAX);
for ( i = ; i < cnt; i++ )
{
close(i);
}
// 将0、1、2定位到/dev/null
open("/dev/null", O_RDWR);
open("/dev/null", O_RDWR);
open("/dev/null", O_RDWR);
}
// 删除文件
void delete_file(void)
{
remove(FILE);
}
[Linux] 守护进程和守护线程
对于JAVA而言,一般一个应用程序只有一个进程——JVM.除非在代码里面另外派生或者开启了新进程. 而线程,当然是由进程开启的.当开启该线程的进程离开时,线程也就不复存在了. 所以,对于JAVA而言, ...
.NET跨平台实践:用C#开发Linux守护进程
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
.NET跨平台实践:用C#开发Linux守护进程(转)
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
[转]❲阮一峰❳Linux 守护进程的启动方法
❲阮一峰❳Linux 守护进程的启动方法 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 ...
Server Develop (七) Linux 守护进程
守护进程 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装 ...
Linux守护进程详解(init.d和xinetd) [转]
一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台 的守护进程来执行的 ...
Linux守护进程详解(init.d和xinetd)
一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的. ...
C#开发Linux守护进程
用C#开发Linux守护进程 Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon ...
linux守护进程、SIGHUP与nohup详解
前端时间帮忙定位个问题.docker容器故障恢复后,其中的keepalived进程始终无法启动,也看不到Keepalived的日志. strace 查看系统调用之后,发现了原因所在 socket(PF ...
随机推荐
windows2003 IIS6.0右键属性没有asp.net选项卡的解决办法
windows2003 IIS6.0右键属性没有asp.net选项卡的解决办法 1,如果是只安装了.net framework 1.1 在iis中是不显示那个选项卡的.默认就会支持asp.net1.1 ...
pku3277 City Horizon
http://poj.org/problem?id=3277 线段树,离散化,成段更新 #include #include #defi ...
HDU-4705 Y 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4705 题意:给一颗树,从树上任意选择3个点{A,B,C},要求他们不在一条链上,求总共的数目. 容易想 ...
IOS 手机端搜索硬件设备 --- 物联网
#include #include #include #include #i ...
mysql的面试试题
1, mysql的复制原理以及流程. (1)先问基本原理流程,3个线程以及之间的关联. 答:Mysql复制的三个线程:主库线程,从库I/O线程,从库sql线程: 复制流程:(1)I/O线程向主库发出请 ...
ehcache.xml设置(转)
推荐的五款市面上常用的免费CMS建站系统
我做设计也有不少年头了,很多客户或者朋友找我做网站的时候,一般问我的是用什么软件系统给他们做.大部分客户希望用的软件是免费的.所以今天给大家介绍五款我自己用过还不错的,重点是还免费的建站系统. Met ...
js 原型,原型链,原型链继承浅析
对于网上的关于原型,原型链和原型链继承的晦涩语言说明就不累赘了,复制粘贴过来再解释一遍怕自己也整蒙了,本人最怕空气突然安静,四目对视,大眼对小眼,一脸懵逼. 我们先看下面
Linux查看服务器配置
服务器型号 [root@txs ~]# dmidecode|grep "System Information" -A9|egrep "Manufacturer|Produ ...
http协议的学习
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.