Linux之精灵进程
一、引言
工作中有时候可能会写一些这样的程序,它作为后台进程运行,生命周期比一般的进程要长,它在系统开机时运行,直到被强制关闭或者系统关机时退出。它就是精灵进程或者也叫做守护进程--daemon process
二、写精灵进程的步骤
1.创建子进程,退出父进程
2.改变文件的掩码
3.打开日志文件,以便向里面写入执行信息
4.创建唯一的会话ID(SID)
5.改变当前的工作路径到一个安全的地方
6.关闭标准文件描述符
7.编写实际的精灵进程代码
三、实例
/*******************************************************************************
* File Name : daemon.cpp
* Author : zjw
* Email : zjw_0722@163.com
* Create Time : 2015年01月05日 星期一 16时00分15秒
*******************************************************************************/ #include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std; int main(int argc, char **argv)
{
pid_t pid, sid; // Fork off the parent process
pid = fork();
if (pid < )
{
exit(-);
} // If we got a good PID, then we can exit the parent process.
if (pid > )
{
exit(-);
} // Change the file mode mask
umask(); // Open any logs here
ofstream fout("/var/log/daemon.log");
if (!fout)
{
exit(-);
} // Create a new SID(Session ID) for the child process
sid = setsid();
if (sid < )
{
// Log any failure
exit(-);
} // Change the current working directory
if ((chdir("/")) < )
{
// Log any failure
exit(-);
} // Close out the standard file descriptors
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO); // Daemon-specific initialization goes here // The big loop
while (true)
{
time_t timeNow;
time(&timeNow);
fout << asctime(localtime(&timeNow)) << endl; sleep();
}
cout << "over" << endl;
return ;
}
这只是一个简单的实例代码,简单的描述了编写精灵进程的大体步骤。其中我遇到了一个这样的问题,运行时出现错误,调试跟踪发现无法打开文件/var/log/daemon.log,明显是权限的问题。使用root用户运行,OK。这里也引出另外一个问题:如何调试fork的子进程?解决办法:Google gdb 多进程即可。

Linux之精灵进程的更多相关文章
- Linux系统编程@进程通信(一)
进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...
- Linux下java进程CPU占用率高分析方法
Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...
- linux下对进程按照内存使用情况进行排序
linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...
- Linux如何查看进程、杀死进程、启动进程等常用命令
Linux如何查看进程.杀死进程.启动进程等常用命令 关键字: linux 查进程.杀进程.起进程1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括 ...
- linux下查看进程占用端口和端口占用进程命令
Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端 ...
- python实现Linux启动守护进程
python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...
- Linux 服务器的网络配置 - 2. 查看 Linux 服务器的进程
2. 查看 Linux 服务器的进程 1)ps [主要选项] -a 显示系统中所有进程的信息 -e 显示所有进程的信息 -f 显示进行的所有信息 -l 以长格式显示进程信息 -r 只显示正 ...
- Linux 线程与进程,以及通信
http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-i ...
- Linux之守护进程
一.守护进程概述 在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进 程.为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一 ...
随机推荐
- 为什么深度神经网络难以训练Why are deep neural networks hard to train?
Imagine you're an engineer who has been asked to design a computer from scratch. One day you're work ...
- Linux 进程学习
1.linux进程间通讯 继承unix进程间通讯:管道 信号 AT&T :system V IPC 通讯进程只能在单个计算机 :信号量 消息队列 共享内存 ...
- 在centos中安装mysql详细步骤说明
Last login: Sun Dec 24 04:55:59 2017 1.安装依赖 [root@node001 ~]# yum install -y perlLoaded plugins: fas ...
- iOS 使用 AVCaptureVideoDataOutputSampleBufferDelegate获取实时拍照的视频流
iOS 使用 AVCaptureVideoDataOutputSampleBufferDelegate获取实时拍照的视频流 可用于实时视频聊天 实时视频远程监控 #import <AVFound ...
- UITextField,UITextView字数限制
UITextField,UITextView字数限制 主要是使用他们的两个代理方法 //标题限制在 30个字以内 - (BOOL)textField:(UITextField *)textField ...
- 常见SQL Server导入导出数据的几个工具
摘自:http://www.cnblogs.com/chenxizhang/archive/2011/06/09/2076542.html 在我们的日常工作中,与数据库打交道的机会越来越多.这一篇文章 ...
- UIActivityViewController实现系统原生分享
代码地址如下:http://www.demodashi.com/demo/11042.html 一.效果预览 二.接下来介绍UIActivityViewController,跟我动手做 1.创建要分享 ...
- LNMP环境搭建——MySQL篇
The world's most popular open source database 1.Install MySQL root@kallen:~# apt-get install mysql-s ...
- (一)Solr——简介和安装配置
1. solr简介 1.1 Solr是什么 Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器. Solr和lucene的版本是同步更新的,最新的版本是7. ...
- Linux su命令参数及用法详解--Linux切换用户命令
建议大家切换用户的时候 使用 su - root 这样,否则可能发现某些命令执行不了 关于su .su - 及 sudo的区别 请往下看 1.命令作用 su的作用是变更为其它使用者的身份,超级用 ...