如何创建守护进程

为什么要弄守护进程?

        在Linux中,每个系统与用户交互的界面叫做终端。从终端运行的进程都会依附于这个终端,所有进程都是由终端进行管理,当关闭终端时所有依附于终端的进程都会被关闭。

        守护进程就是要突破这种限制, 从开机运行,直到关机退出 。如果某个进程不想受到用户进程或终端控制,只需要把进程变为守护进程。

守护进程的编写步骤:

1. 创建子进程,父进程退出

        让子进程变为后台进程,形式上就脱离了终端,子进程变为孤儿进程

if( fork() > 0)//关闭父进程
{
exit(0);
}

2. 在子进程中创建新会话,子进程变为会话组组长

#include <sys/types.h> 
#include <unistd.h> 

//设置当前进程为会话组组长
 pid_t setsid(void);

3.修改子进程工作路径

#include <unistd.h> 

int chdir(const char *path); 

参数:

    参数1:const char *path:修改的工作路径,既后面守护进程在什么地方进程后台运行

4. 在子进程中修改文件权限

#include <sys/types.h> 
#include <sys/stat.h> 

mode_t umask(mode_t mask); 

参数:
    参数1: mode_t mask:要设置的新的文件权限掩码 如:0002、0022、0000

5. 关闭父进程打开的文件描述符(如:标准输入、标准输出、标准错误)

#include <unistd.h> 

int getdtablesize(void);//获取打开的文件描述符的最大值

例程:

#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
	
	pid_t pid = fork();//创建子进程

	if(pid > 0)  //关闭父进程,子进程变成孤儿进程
		_exit(0);

	pid = setsid();//会话id  //知识点在进程基础概念里

	int num = chdir("/home/ubuntu");   //守护进程后面运行的地方	
	if(num < 0 )   //创建失败
	{
		perror("error");
	}
	umask(0);

	int fds = getdtablesize();   //关闭父进程的标准输入、标准输出、标准错误

	for(int i = 0;i < fds;i++)
	{
		close(i);
	}

	int fd = open("ok.txt",O_WRONLY|O_CREAT,0777);//创建ok.txt文件权限777

	while(1)   //每隔1S往ok.txt文件里写hello world
	{
		write(fd,"hello world\n",12);
		sleep(1);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啵啵520520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值