嵌入式linux的学习笔记-守护进程(五)
2010-12-17 12:00
399 查看
守护进程
在linux系统的控制台下敲击 ps -A命令 或者 ps -e命令我们可以看到当前系统的前后台进程,凡是最后一个字符为d的进程都为守护进程,例如smbd,vsftpd,maild,telnetd等等
守护进程是没有控制终端的,终端名称都为?,所有守护进程的父进程都是init进程
下面创造一个守护进程
例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unlstd.h>
#include <sys/wait.h>
#define MAXFILE 65535 //父进程中的最大文件描述符个数
int main()
{
pid_t pc; //进程id
int i,fd,len;
char *buf="this is a test\n";
len=strlen(buf); //得到buf的长度
pc=fork(); //创建子进程
if(pc>0) exit(0); //直接关闭父进程,使子进程失去父进程,从而让init接管无主进程,所以可以了解到,守护进程的父进程是init进程
//以下都在子进程中运行
setsid(); //脱离以前的会话组,脱离以前的进程组,切断控制终端,将子进程提升为进程组首进程
chdir("/"); //改变根目录,该目录我们可以自行定义
umask(0); //更改文件的读写权限,0表示开放所有权限
for(i=0;i<MAXFILE;i++) close(i); //关闭从父进程继承来的所有文件描述符,避免资源浪费
while(1)
{
if((fd=open("/tmp/test_dameon.log",O_CREAT|O_WRONLY|O_APPEND,0600))==-1)
//O_CREAT表示打开文件,但是如果文件不存在则创建文件
//O_WRONLY表示采用读写方式打开
//O_APPEND表示在文件的尾部追加的方式打开
//0600,为0000 0110 0000 0000 ,为文件类型为0 ,文件所有者可读可写不可运行,用户组与超级用户无权限,其他用户无权限
{
//创建或打开失败,出错处理
}
write(fd,buf,len+1); //向fd所指向的文件内部追加buf缓冲中的len+1(+1是因为字符串最后有个\0 字符)个字节的字符
close(fd); //关闭文件描述符
sleep(2); //系统休眠2秒
}
}
该进程的运行效果是每两秒向 /tmp/test_dameon.log 文件中追加一行"this is a test"字符串
守护进程可以用来用户自定义的监听各种服务,例如自己的web服务器等等
在linux系统的控制台下敲击 ps -A命令 或者 ps -e命令我们可以看到当前系统的前后台进程,凡是最后一个字符为d的进程都为守护进程,例如smbd,vsftpd,maild,telnetd等等
守护进程是没有控制终端的,终端名称都为?,所有守护进程的父进程都是init进程
下面创造一个守护进程
例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unlstd.h>
#include <sys/wait.h>
#define MAXFILE 65535 //父进程中的最大文件描述符个数
int main()
{
pid_t pc; //进程id
int i,fd,len;
char *buf="this is a test\n";
len=strlen(buf); //得到buf的长度
pc=fork(); //创建子进程
if(pc>0) exit(0); //直接关闭父进程,使子进程失去父进程,从而让init接管无主进程,所以可以了解到,守护进程的父进程是init进程
//以下都在子进程中运行
setsid(); //脱离以前的会话组,脱离以前的进程组,切断控制终端,将子进程提升为进程组首进程
chdir("/"); //改变根目录,该目录我们可以自行定义
umask(0); //更改文件的读写权限,0表示开放所有权限
for(i=0;i<MAXFILE;i++) close(i); //关闭从父进程继承来的所有文件描述符,避免资源浪费
while(1)
{
if((fd=open("/tmp/test_dameon.log",O_CREAT|O_WRONLY|O_APPEND,0600))==-1)
//O_CREAT表示打开文件,但是如果文件不存在则创建文件
//O_WRONLY表示采用读写方式打开
//O_APPEND表示在文件的尾部追加的方式打开
//0600,为0000 0110 0000 0000 ,为文件类型为0 ,文件所有者可读可写不可运行,用户组与超级用户无权限,其他用户无权限
{
//创建或打开失败,出错处理
}
write(fd,buf,len+1); //向fd所指向的文件内部追加buf缓冲中的len+1(+1是因为字符串最后有个\0 字符)个字节的字符
close(fd); //关闭文件描述符
sleep(2); //系统休眠2秒
}
}
该进程的运行效果是每两秒向 /tmp/test_dameon.log 文件中追加一行"this is a test"字符串
守护进程可以用来用户自定义的监听各种服务,例如自己的web服务器等等
相关文章推荐
- Linux学习笔记之守护进程
- Linux进程间的通信——守护进程学习笔记
- 嵌入式linux应用程序学习-守护进程的创建
- 嵌入式Linux学习笔记第四天 ——进程控制
- linux学习笔记:关于linux守护进程与终端的通信
- 嵌入式学习笔记_Linux(三)——Linux进程控制
- Linux下学习守护进程的笔记
- 嵌入式学习笔记_Linux(四)——Linux进程通信
- linux学习笔记-读《Linux编程技术详解》-守护进程
- Linux进程通信----学习笔记(一)
- Linux 学习笔记(四)进程控制
- linux【进程学习】笔记——PCB、进程环境、进程原语、虚拟地址……
- Linux进程调度学习笔记
- 嵌入式linux c 学习笔记3-归并排序
- 嵌入式开发之Linux基础第二天学习笔记 linux系统命令(一)&其他
- 嵌入式linux c 学习笔记3-date
- 嵌入式linux学习笔记2之DNW的安装
- Linux 学习笔记_8_进程管理_1_进程的概念
- 嵌入式开发之linux基础第四天学习笔记 vim编辑器
- 学习笔记--Linux系统进程管理