Linux下的守护进程(daemon)(代码保留)

环境:Vmware Workstation;CentOS-6.4-x86_64

说明:

1、一般程序的特点:依赖终端,终端退出,程序也会退出。也就是说,程序的TTY是pts/0,pts/0关闭,程序也会关闭。(ps -u negivup)

2、守护进程的特点:不依赖终端,不通过kill,无法关闭进程。

创建守护进程的步骤:

1、父进程中执行fork后,执行exit退出,使子进程成为孤儿进程(孤儿进程不依赖终端)。

2、在子进程中调用setsid(取消进程与任何终端之间的关联)。

3、让根目录“/”成为子进程的工作目录。

4、把子进程的umask变为0。

5、关闭不需要的文件描述符。

(3、4、5三项的设置是可选的,根据自己的需要设定,但是前两项是必须的)

守护进程的程序:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char *args[])
{
	// 使用fork创建进程
	pid_t pid = fork();
	// 判断fork是否成功
	if (pid == -1)
	{
		printf("Message : %s\n", strerror(errno));
		return -1;
	}
	
	if (pid > 0)
	{
		// 1、父进程退出,使子进程成为孤儿进程
		exit(0);
	}
	else
	{
		// 2、取消进程和任何控制终端的关联
		setsid();
		// 下面的一下步骤是根据自己需要选择的,即使不选择,这个进程也是守护进程
		/
		// 3、让根目录成为当前执行的目录
		chdir("/");
		// 4、设置进程的启动权限
		// 不继承启动程序用户的权限
		// 这样做的目的是保证这个进程能够被其他用户正常使用
		umask(0);
		// 5、关闭不需要的文件描述符
		close(STDIN_FILENO);
		close(STDOUT_FILENO);
		close(STDERR_FILENO);
		/
		// 这里的暂停是为了保证进程不会退出
		// 否则,通过ps -u [username]看不到守护进程
		pause();
	}
	
	return 0;
}


PS:根据传智播客视频学习整理得出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值