daemon函数的原理及使用详解

Linux下使用daemon函数编写后台程序 在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下   int daemon (int __nochdir, int __noclose);   如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入,输出和标准错误都重定向到/dev /null。   经过这个函数调用后的程序将运行在后台,成为一个daemon程序,而linux下大多的服务都是以此方式运行的。   我们来看一个简单的例子。例如编写例子程序test.c #include <unistd> #include <stdio> int d 立即下载

http://blog.chinaunix.net/uid-20196318-id-94985.html

 

在linux系统下创建守护进程的原理及步骤在文章(链接如下)中介绍过。http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&id=28738

 

其实,linux提供了daemon函数用于创建守护进程,实现原理与上文中介绍的是一样的。

#include <unistd.h>

int daemon(int nochdir, int noclose);

1. daemon()函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序。

2. 当nochdir为0时,daemon将更改进城的根目录为root(“/”)。

3. 当noclose为0是,daemon将进城的STDIN, STDOUT, STDERR都重定向到/dev/null。

 

daemon的实现大致如下:

int daemon( int nochdir,  int noclose )
{
   pid_t pid;
   if ( !nochdir && chdir("/") != 0 ) //如果nochdir=0,那么改变到"/"根目录
       return -1;
   
   if ( !noclose ) //如果没有noclose标志
   {
        int fd = open("/dev/null", O_RDWR);
        if ( fd  <  0 )
            return -1;

 

       /* 重定向标准输入、输出、错误到/dev/null,

键盘的输入将对进程无任何影响,进程的输出也不会输出到终端

*/

dup(fd, 0);

dup(fd, 1);

dup(fd, 2);     

close(fd);

}

   pid = fork();  //创建子进程.
   if (pid  <  0)  //失败
      return -1;
   if (pid > 0)
       _exit(0); //返回执行的是父进程,那么父进程退出,让子进程变成真正的孤儿进程.

//创建的 daemon子进程执行到这里了
   if ( setsid()  < 0 )   //创建新的会话,并使得子进程成为新会话的领头进程
      return -1;
   return 0;  //成功创建daemon子进程
}

 

使用实例:

int main()

{

    daemon(1, 1); //参数根据需求确定

    /*  在这里添加你需要在后台做的工作代码  */

}

如何杀死这样的进程:

通过ps+grep找到对应的后台进程,使用kill命令将进程杀死;也可创建shell脚本对进程的启动、关闭、重启进行自动管理,参考下文:

http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&id=28824

UNet改进(23):如何用SLCAM模块提升UNet的分割性能 本文提出一种改进的UNet架构,通过引入轻量化注意力模块(SLCAM)增强医学图像分割性能。SLCAM整合了通道和空间双重注意力机制:通道注意力采用全局池化和共享MLP学习通道权重,空间注意力通过7×7卷积捕捉上下文信息。网络在传统UNet基础上,在每个下采样和上采样块后加入SLCAM模块,并保持跳跃连接结构。实验表明,该方法能自适应聚焦重要特征,在不显著增加计算负担的情况下提升分割精度,特别适用于医学图像等需精确边界的场景。未来可探索三维注意力、动态参数调整等改进方向。 阅读详情

相关推荐

H3C VRF实验

POP-vpn-instance-RT1]route-distinguisher 11:11 # VPN实例-RT1的路由区分器值11:11。配置路由泄露,其实就是在一个VPN示例中添加另一个VPN实例的下一跳,比如在VPN实例RT1中添加去往SRV的默认路由。但是也有了一个新的问题,那就是RT1、RT2和RT3也能互访了,这让VPN实例变得没有意义了。[POP]ip vpn-instance RT1 #配置vpn实例-RT1。绑定了VPN实例,所以要把路由添加到VPN实例POP中。

m0_68698993的博客 4023

linux编程-守护进程编写

linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程

aaronjzhang_的专栏 1424

从0到1搭建StarRocks3.4.1存算一体架构(VM 虚拟机版)

本文详细介绍了如何在VM虚拟机上从零搭建StarRocks 3.4.1存算一体架构。首先阐述了StarRocks作为高性能分布式SQL数据仓库的优势,重点讲解了其存算一体架构的设计原理。随后提供完整的安装指南,包括环境准备(3台CentOS 8虚拟机配置)、网络互通验证、Java环境配置、软件包解压安装等关键步骤。文章特别详细说明了FE和BE节点的配置文件修改(fe.conf和be.conf)以及必要的防火墙端口开放配置。通过图文并茂的方式,帮助开发者和运维人员快速掌握StarRocks集群部署方法,为后续

小 tom的博客 1329

daemon函数理解及参数使用——daemon后进程退出的原因

最近在使用daemon函数的时候,遇到了一个不算问题的问题,一开始没有发现也是由于我对这个函数的参数没有深入了解过。下面来稍微深入了解一下这个函数: linux提供了daemon函数⽤于创建守护进程,使进程脱离控制台,在后台运行。 函数原型: 头文件 #include <unistd.h> int daemon(int nochdir, int noclose); 当nochdir为0时,daemon将更改进程的根⽬录为root(“/”)。(我就是在这里犯的错误) 当noclose为0时,

ZHENYU的博客 2908

Windows平台MuJoCo仿真环境配置与Qt集成实战

本文详细介绍了在Windows平台上配置MuJoCo物理仿真环境并与Qt框架集成的完整实战流程。内容涵盖从环境准备、库文件配置、项目创建到核心代码编写的每一步,重点解决了Windows下常见的编译链接错误和路径问题,帮助开发者在Windows系统中高效搭建机器人仿真与可视化控制开发环境。

weixin_29221753的博客 170

AI内容安全机制解析:从破甲现象看模型防护与合规边界

AI内容安全机制是保障人工智能模型合规应用的核心技术,其原理基于多层防护体系。通过意图识别、关键词过滤和多模态检测等技术,系统能够实时监控用户输入和模型输出,有效拦截违规内容。这种机制的技术价值在于平衡模型创造力与内容安全性,确保AI生成内容符合伦理规范。在应用场景上,内容安全机制广泛应用于聊天机器人、内容创作平台和企业级AI系统,防止色情、暴力等有害信息的传播。随着破甲等绕过手法的出现,安全机制需要持续进化以应对指令混淆、上下文污染等新型挑战。本文从技术攻防角度深入分析AI内容安全的实现原理与发展趋势,为

1080

linux环境下使用daemon函数实现守护进程

daemon进程是后台守护进程,比如linux 下server都是daemon进程,像httpd、sshd等这些服务你肯定听说过,如果我们想写一个后台运行程序应该怎么做呢?其实非常容易,只要添加unistd.h头文件,然后在调用daemon函数即可...

AlbertS Home of Technology 2962

双向晶闸管交流调压基础知识及Multisim电路仿真

本文介绍了双向晶闸管交流调压电路的工作原理及应用。该电路由双向晶闸管、RC移相电路和双向触发二极管组成,通过调节电位器改变触发角实现电压调节。当电位器阻值减小时,触发角减小,输出电压升高;阻值增大时,触发角增大,输出电压降低。Multisim仿真展示了不同电位器档位下的波形特征:0%档位时全导通,50%档位时半导通,100%档位时基本关断。该电路结构简单、调节平滑,广泛应用于调光、调速等场合,但会产生谐波干扰。

XU157303764的博客 837

linux系统服务daemon(1)

实现service的程序就是daemon 分类:独立启动的stand alone 和super alone stand alone:可自行单独启动服务 启动加载到内存中,一直占用内存和系统资源,优点在于:对于客户端的请求,stand alone的daemon响应较快。常见的有www的daemon,ftp的daemon super alone:一个特殊的daemon来统一管理 当没有客户端

hahachenchen789的博客 1526

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

手把手教你学Simulink--H桥逆变器的PWM控制设计与仿真

本文详细介绍了如何在Simulink环境中设计和仿真一个基于PWM控制的H桥逆变器。H桥逆变器广泛应用于电机驱动、UPS和可再生能源系统等领域,通过PWM技术可以有效控制输出电压的幅度和频率,减少谐波失真,提高系统效率和稳定性。文章首先介绍了所需的工具和环境,包括MATLAB/Simulink和SimscapeElectrical工具箱。接着,详细阐述了从定义任务需求、创建Simulink项目、建立基础电气模型、集成传感器模型、实现PWM控制算法到设置仿真参数和运行仿真的完整步骤。最后,文章总结了通过Sim

MHD0815的博客 718

认识daemon函数

在C语言中,daemon函数是一个用于将程序转换成守护进程(daemon)的工具函数。守护进程是一种在后台运行的特殊进程,它们通常用于执行长期运行的服务或任务,而不会阻塞当前的终端或会话。

weixin_53360142的博客 727

Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化

在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装app,来加快开机时间,接下来 来实现这个功能

安卓兼职framework和app工程师的博客 1333

daemon函数 linux,daemon函数的原理及使用详解

在linux系统下创建守护进程的原理及步骤在文章(链接如下)中介绍过。http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&id=28738其实,linux提供了daemon函数用于创建守护进程,实现原理与上文中介绍的是一样的。#includeintdaemon(int nochdir, int noclose);...

weixin_29230805的博客 662

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux 守护进程创建实战:7步流程详解与 daemon() 函数对比分析

本文详细解析了Linux守护进程的创建流程,从手动构建的7个关键步骤到系统函数daemon()的使用与原理对比,帮助开发者深入理解守护进程的本质与应用场景。文章还涵盖了日志记录策略、信号处理以及现代systemd集成方案,为构建稳定可靠的后台服务提供全面指导。

weixin_28713947的博客 367

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

(转)守护进程原理分析以及linux下的daemon函数使用

以下讲的是守护进程的原理,linux下不用这么麻烦,但是看看还是有必要的。转自:http://www.cppblog.com/tx7do/articles/5963.html Linux守护进程的编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任 务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守...

weixin_34198453的博客 186

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RTOS的软件定时器

在FreeRTOS里,我们可以设置无数个"软件定时器",它们都是基于系统滴答中断。

weixin_74006184的博客 175

daemon函数实现原理

linux提供了daemon函数用于创建守护进程,实现原理如下: #include int daemon(int nochdir, int noclose); 1. daemon()函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序。 2. 当nochdir为0时,daemon将更改进城的根目录为root(“/”)。 3. 当noclose为0是,daemon将进城的STDIN

2313

Linux daemon进程原理与使用

什么情况下用daemon进程生产环境下,除了我们ssh登录上去,然后手动跑的那部分以外,其他都是自动运行的,这些大部分都应该是后台执行的。如何才能后台执行呢? nohup ./XXX & 由系统的其他daemon进程启动。这样的话,你的程序是它的子进程,跟终端没关系。退出终端也不会导致进程退出。如写在crontab里。 写成daemon程序,可以手动执行,退出终端时程序不退出。 如何选择呢? (1

纯,属虚构 7825

Unix 网络编程_阅读笔记二 守护进程和高级I/O

Unix 网络编程_阅读笔记 二 (Socket高级篇之守护进程和高级I/O) --Unix Network Programming 由 王宇 原创并发布 本文代码,在以下环境下编译通过 CentOS 6.4 Kernal version: 2.6.32 GCC version: 4.4.7 一、Dasmon 进程和 'inetd' 超级服务 daemon 是后...

MrWangyu的专栏 304

Daemon函数的用法

<br /> <br />Daemon函数的用法<br />说明:<br />让一个程序后台运行。<br />原型:<br /><br />#include <unistd.h> int daemon(int nochdir, int noclose); <br />参数:<br />当 nochdir为零时,当前目录变为根目录,否则不变;<br />当 noclose为零时,标准输入、标准输出和错误输出重导向为/dev/null,也就是不输出任何信息,否则照样输出。<br />返回值:<br />

每天进步一点点... 3万+
上一篇: Linux命令行技巧
下一篇: likely 和 unlikely 的功能就是添加 cache 的命中率,提高系统速度
Iphone4
博客等级 码龄17年 17粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值