把之前slurm_server变成daemon

本文介绍了一个简单的守护进程初始化过程及如何响应终止信号。通过C语言实现,该守护进程在启动时会进行脱壳处理,并注册SIGTERM信号处理器来执行清理工作并退出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>

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

#include <signal.h>
#include <syslog.h>

#include "socket_server.h"

static void sig_term_func(int SIG)
{
	if(SIG == SIGTERM){
		syslog(LOG_INFO, "terminated.");
		closelog();
		exit(0);
		// do some clean work, e.g., close file/socket
	}
}

static int daemon_init(void)
{
	pid_t pid;

	if((pid = fork()) < 0)
		exit(-1);
	else if(pid != 0) //as to parent, fork will return child's pid
		exit (0);   //parent exit
	else if (pid == 0) {   	//child continues
		setsid();      //become session leader
		umask(0);      //clear file mode creation mask
		close(0);  //close stdin, stdout, stderr
		close(1);
		close(2);

		openlog("slurm server daemon:", LOG_PID, LOG_USER);
		syslog(LOG_INFO, "started.");
		signal(SIGTERM, sig_term_func);

		running(); //real work in child process
	}
	return 0;
}


int main (int argc, char *argv[])
{
//	allocate_noblock();
//	puts("=====================================");
//	allocate_block();
//	puts("=====================================");
//	get_node_info();
//	puts("=====================================");
//	get_pratition_info();
//	puts("=====================================");

	if(daemon_init() == -1){
		printf("can not fork self");
		exit(0);
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值