Linux学习笔记(9)-守护进程
明天学这个!!
——————————————————————————————————————————————————————————
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件,它不需要用户输入就能运行并提供某种服务。
守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程。守护进程是非交互式程序,没有控制终端,所以任何输出,无论是向标准输出设备还是标准错误输出设备的输出都需要特殊处理。
Linux系统有多种创建守护进程的方法,其中最常用的的是使用daemon()函数来创建守护进程:
int daemon(int nochdir , int noclose);
参数 nochdir 如果为零,那么daemon函数将调用进程的目录,设为根目录。否则原有的工作目录不变。
参数 noclose 如果为零,那么daemon将重新定义输入、输出标准。否则不变。
总得来说,守护进程就是一种运行在后台的进程,是无法在控制台直接操作的进程,至于功能,需要自己编写。
现在用daemon函数写个程序,运行之后,每过十秒钟,在一个指定的文件里面写上一句话。
进入编码模式……
#include<stdio.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<time.h>
#include<string.h> char lab_now[]="现在的时间是:";
int main(void)
{
int fd;
time_t curtime; if(daemon(,)<)
{
printf("创建守护进程失败errno=%d.\n",errno);
exit(-);
}
fd = open("/home/vmuser/work/daemon/daemon.txt",O_WRONLY|O_CREAT|O_APPEND,0x777);
if (fd < )
{
printf("创建文件失败!\n");
exit(-);
} while()
{
curtime = time();
char *timestr = asctime(localtime(&curtime));
strcat(lab_now,timestr);
write(fd,lab_now,strlen(lab_now));
sleep();
} return ;
}
花了半个小时,代码编写完毕,途中出现的几个小问题也修改完成!
现在开始做makefile:
EXE=daemon
SRC=daemon.c
OBJ=daemon.o cc=gcc
CFLAG=-g
LCDFLAG= EXE:$(OBJ)
$(cc) $(LCDFLAG) $(SRC) -o $(EXE) OBJ:$(SRC)
$(cc) -c $(SRC) -o $(OBJ) .PHONY:clean
clean:
rm -vfr $(OBJ) $(EXE) daemon.txt
执行编译……
在执行代码之前,文件结构是这样的:
在执行了代码后,文件结构变成了这样:
文件已经建立成功,虽然表面上看,什么也没有,但程序也应该是在后台运行了起来,查看daemon.txt文件,看看是否如自己预料的那般,每隔十秒就答应点信息。
答应的结果如下,很明显,自己的代码有问题。每次都把取得的时间接到lab_now字符串后面,那么这个字符串会无限的变大……哎,真是粗心啊!
——————————————————————————————————————————————
用了一个笨办法,将代码修改如下:
#include<stdio.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<time.h>
#include<string.h> char lab_now[]="现在的时间是:";
int main(void)
{
int fd;
time_t curtime; if(daemon(,)<)
{
printf("创建守护进程失败errno=%d.\n",errno);
exit(-);
}
fd = open("/home/vmuser/work/daemon/daemon.txt",O_WRONLY|O_CREAT|O_APPEND,0x777);
if (fd < )
{
printf("创建文件失败!\n");
exit(-);
} while()
{
curtime = time();
char *timestr = asctime(localtime(&curtime));
strcat(lab_now,timestr);
write(fd,lab_now,strlen(lab_now));
strcpy(lab_now,"现在的时间是:");
sleep();
} return ;
}
添加了将那个字符串lab_now赋值的处理,方法是有点笨,但现阶段是好用就行!
代码运行之后,显示结果如下……
显示结果正确,然后用ps -ef指令来查看一下:
确实,进程正在后台运行!
今天的作业完成!
Linux学习笔记(9)-守护进程的更多相关文章
- linux c语言学习笔记之守护进程
哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处 http://blog.csdn.net/woshixingaaa/archive/2010/06/06/5651095.aspx 守 ...
- linux学习笔记--程序与进程管理
.工作管理 1.前台程序放后台程序 命令后 加 & 2.任务执行时将前台任务任务放到后台中并[暂停] ctr + z 3.jobs 观察后台工作状态 及多少任务在执行,可以通过 help ...
- linux学习(四) -- supervisor守护进程
supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 1.安装 apt-get install ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- Linux学习笔记——管道PIPE
管道:当从一个进程连接数据流到另一个进程时,使用术语管道(pipe).# include <unistd.h> int pipe(int filedes[2]); //创建管道 pipe( ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- linux学习笔记2-linux的常用命令
第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...
- linux —— 学习笔记(汇总)
笔记目录:一.系统知识 和 基本概念 二.常用操作 三.系统管理(内存.设备.服务等管理) ...
- Linux学习笔记-林耐斯Notes-Linux就该这么学
Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...
- deepin linux学习笔记
目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...
随机推荐
- 年月日与time的相互转换
年月日的转换 // 这里就是把时间格式化成你要的 SimpleDateFormat sdf = new SimpleDateFormat("yyyy");//将时间转换为年 Sim ...
- MySQL练习-employees数据库(一)
安装一个数据库示例--employees 使用工具为Navicat--(ctrl + q: 打开新查询窗口 ctrl + r: 运行当前窗口内的所有语句) 参考http://www.cnblogs.c ...
- php中计算二维数组中某一元素之和
[0] => array(5) { ["id"] => string(2) "11" ["name"] => string ...
- Linux less 命令
- less 打开文件后: shift + g 转至文件末尾 g 转至文件开头 搜索字段(/<pattern>)后: n 转至下一个匹配的字段 shift + n 转至上一个匹配的字段 同 ...
- PHP语言中使用JSON和将json还原成数组
从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码. 一.json_encode() 1 2 3 4 <?php $arr = ...
- JAVA基础学习——1.0 Java概述
Java语言 SUN公司 1995年推出的高级编程语言 ■ 主要应用方向 Web开发和Android开发 ■ 主要特点 平台无关性:能运行于不同的平台上 安全性:去掉了指针操作,内存由操作 ...
- ThinkPHP函数详解:U方法
U方法用于完成对URL地址的组装,特点在于可以自动根据当前的URL模式和设置生成对应的URL地址,格式为:U('地址','参数','伪静态','是否跳转','显示域名');在模板中使用U方法而不是固定 ...
- getAttribute、setAttribute、removeAttribute
1.函数语法 elementNode.attributes:属性返回包含被选节点属性的 NamedNodeMap. elementNode.getAttribute(name):方法通过名称获取属性的 ...
- 【webGL】插件的使用的,实现一个鼠标动画的盒子
准备工作: 1.stat.js stat.js是Three.js的作者Mr. Doob的另一个有用的JavaScript库.很多情况下,我们希望知道实时的FPS信息,从而更好地监测动画效果.这时候,s ...
- 自定义类似MessageBox小窗体操作
1.实际小窗体界面如下 2.代码如下 private void InputBox(string caption,string orderNo) { Form InputForm = new Form( ...