linux守护进程简单创建

news2024/12/23 15:07:14

1.什么是守护进程?

守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引 导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。

用户使守护进程独立于所有终端是因为,在守护进程从一个终端启动的情况下,这同一个终端可能被 其他的用户使用。例如,用户从一个终端启动守护进程后退出,然后另外一个人也登录到这个终端。用户 不希望后者在使用该终端的过程中,接收到守护进程的任何错误信息。同样,由终端键入的任何信号(例如 中断信号)也不应该影响先前在该终端启动的任何守护进程的运行。虽然让服务器后台运行很容易(只要 shell 命令行以&结尾即可),但用户还应该做些工作,让程序本身能够自动进入后台,且不依赖于任何终端

守护进程没有控制终端,因此当某些情况发生时,不管是一般的报告性信息,还是需由管理员处理的 紧急信息,都需要以某种方式输出。Syslog 函数就是输出这些信息的标准方法,它把信息发送给 syslogd 守 护进程。

2.怎么创建一个守护进程?

有个基本要求:

1. 必须作为我们 init 进程的子进程

2. 不跟控制终端交互。

步骤:

1.使用 fork 函数创建一个新的进程,然后让父进程使用 exit 函数直接退出(必须要的)

2.调用 setsid 函数。(必须要的)

3.调用 chdir 函数,将当前的工作目录改成根目录,增强程序的健壮性。(不是必须要的)

4.重设我们 umask 文件掩码,增强程序的健壮性和灵活性(不是必须要的)

5.关闭文件描述符,节省资源(不是必须要的)

6.执行我们需要执行的代码(必须要的)

实验代码:

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

int main(int argc, char const *argv[])
{
    //pid_t fork(void);
    pid_t pid;
    //步骤一:创建一个新的进程
    pid = fork();

    //父进程直接退出
    if (pid > 0)
    {
       _exit(0);
    }

    if (pid == 0)
    {
        // 步骤二:调用 setsid
        setsid();
        // 步骤三:更改工作目
        chdir("/");
        // 步骤四:重新设置 umask 文件源码
        umask(0);
        // 步骤五:0 1 2 三个文件描述符
        close(0);
        close(1);
        close(2);
        // 步骤六:执行我们要执行的代码
        while (1)
        {
            /* code */
        }
        
    }
    

    return 0;
}

运行测试,如下图所示:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

平行云X火山引擎:探索XR观展的极致体验

5月20日&#xff0c;素有艺术界“奥林匹克”之称的第18届威尼斯国际建筑双年展&#xff08;以下简称“威尼斯双年展”&#xff09;中国国家馆展览正式开幕。 威尼斯双年展为当今世界规模最大、最具影响力的国际艺术盛事之一&#xff0c;中国文化和旅游部自2005年起主办中国国家…

六一儿童节海外网红营销指南:出海品牌的增长秘诀

六一儿童节作为全球范围内备受关注的节日之一&#xff0c;为孩子们提供了欢乐和庆祝的机会。对于出海品牌来说&#xff0c;利用六一儿童节进行海外网红营销不仅可以吸引年轻消费者的关注&#xff0c;还能够增加品牌的知名度和影响力。根据行业研究机构Statista的数据&#xff0…

第十三章行为型模式—模板模式

文章目录 模板模式解决的问题结构实例存在的问题适用场景 JDK源码 - InputStream 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。行为型模式分为…

hive如何实现oracle的connect by prior函数

Hive中如何实现层级查询 类似oracle中 connect by prior 实现的效果&#xff1f; - 知乎 大佬写的很详细&#xff0c;有兴趣自己看&#xff0c;但是存在一个问题 create table test.emp ( empno string, ename string, job string, mgr strin…

如何使用MapStruct优雅的告别get,set

我们开发过程中会遇到很多bean拷贝的过程&#xff0c;最简单粗暴得方法就是set/get方法&#xff0c;当然这也是最臃肿的方法&#xff0c;代码显得过于冗长和笨重&#xff0c;其次还有框架BeanUtils在使用反射的时候都会影响到性能。虽然我们可以进行反射信息的缓存来提高性能。…

网络安全实用篇—iptables防火墙学习总结

iptables防火墙学习总结 目录 iptables简介&#xff1a; iptables题目练习&#xff1a; 题目包含&#xff08;市赛、省赛、国赛&#xff09;覆盖所有比赛面&#xff01; iptables简介&#xff1a; Iptables是Linux系统中的一个防火墙工具&#xff0c;它可以对进出本机的…

用Photoshop软件制作法线图以及查看效果细节

这里是在windows系统下用PS2020做演示。 第一步、在Photoshop软件中打开一张图(最好是正方形&#xff0c;边长是2的n次方大小的像素&#xff0c;例如宽和高都是512像素)&#xff0c;如下图所示&#xff1a; 第二步、在菜单栏选择滤镜然后再选择3D接着再选择生成法线图&#xf…

【漏洞复现】DedeCMS存在文件包含漏洞导致后台getshell(CVE-2023-2928)

复现环境下载 https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.106-UTF8.zip 影响版本 DedeCMS V5.7.106 CNVD编号&#xff1a;CNVD-2023-40504 漏洞分析 漏洞文件: uploads/dede/article_allowurl_edit.php存在缺少对该文件中写入内容的任何过滤是导致该漏洞的…

程序员的新型开发工具——低代码平台

低代码的热潮至今未消停&#xff0c; 从阿里钉钉跨平台协作方式&#xff0c;再到飞书上的审批流程&#xff0c;以及目前我们接触到的表单审批、投票的模板&#xff0c;这些都是关于低代码的实现方式。 一、低代码平台概述 按维基百科的说法&#xff0c;低代码这个称呼是 Forres…

大数据时代,Python实现API调用的步骤及示例代码;

Python是一种非常流行的编程语言&#xff0c;可以用于实现各种各样的应用程序&#xff0c;其中包括通过API对各种服务进行调用。API是应用程序接口的缩写&#xff0c;它提供了一种编程接口&#xff0c;允许软件开发者使用其他服务的功能&#xff0c;包括访问数据库、发送电子邮…

【重磅发布】谷云科技与海量数据完成产品兼容性互认证!

近日&#xff0c;谷云科技&#xff08;广州&#xff09;有限责任公司&#xff08;以下简称“谷云科技”&#xff09;的混合集成平台&#xff08;ipaas&#xff09;、全域数据交换平台、主数据管理平台与北京海量数据技术股份有限公司(以下简称“海量数据”)的海量数据库G100管理…

代码随想录算法训练营day57 | 647. 回文子串,516.最长回文子序列,动态规划总结篇

代码随想录算法训练营day57 | 647. 回文子串&#xff0c;516.最长回文子序列&#xff0c;动态规划总结篇 647. 回文子串解法一&#xff1a;动态规划解法二&#xff1a;双指针中心扩散法 516.最长回文子序列解法一&#xff1a;动态规划 动态规划总结篇动划基础背包问题系列打家劫…

网络安全基本概念

一、什么是网络安全 &#xff08;1&#xff09;网络安全 网络安全指网络系统中的硬件、软件以及系统中的数据受到保护&#xff0c;不因偶然或恶意的原因而遭到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 网络安全包括&#xff1a;网络…

好程序员解析:2023年物联网的发展现状和未来趋势

物联网&#xff1a;把所有物品通过信息传感设备与互联网连接起来&#xff0c;进行信息交换&#xff0c;即物物相息&#xff0c;以实现智能化识别和管理。 物联网是新一代信息技术的重要组成部分&#xff0c;也是“信息化”时代的重要发展阶段。物联网的核心和基础仍然是互联网&…

伊利与腾讯云CODING的「水乳交融」启示录

本文转载雷锋网 “对蜡烛的不断优化&#xff0c;是不可能导致电灯发明的。” 谈数字化与创新能力&#xff0c;有时会掉进这样的误区&#xff1a;更换个别工具&#xff1d;数字化&#xff1d;创新。用蜡烛打个比方&#xff0c;常见的优化是&#xff0c;让蜡烛直径变宽更防风、变…

系统分析师:全程指导例题

1、流水线 题解&#xff1a;这里假设能并行处理&#xff0c;画流水线时空图如下&#xff1a; 这里可以看到&#xff0c;处理4个数据需要15At&#xff0c;因此实际速率是4/15At&#xff0c;流水线效率为忙碌时间与总时间对比&#xff0c;也可以看成忙碌时空区/总时空区&#xff…

C++学习之旅-入门永远的HelloWorld变量的基础

文章目录 创建文件(Hello World)注释变量的使用常量标识符命名规则数据类型整形sizeof关键字实型(浮点类型)字符型转义字符字符串类型布尔类型数据的输入加减乘除运算算数运算逻辑运算 程序流程结构选择结构循环结构 跳转语句举例(while循环break)举例(for循环contine) 跳转语句…

Eclipse教程 完结(上)

Eclipse 安装插件 查找和安装插件 Eclipse作为一个集成的IDE开发工具&#xff0c;为我们的软件开发提供了便利&#xff0c;eclipse除了自带的强大功能外&#xff0c;还支持功能丰富的插件。 我们可以通过Eclipse官方市场 (Eclipse Plugins, Bundles and Products - Eclipse …

【数据集】Cityscapes-流行的语义分割数据集

本文介绍用于智能驾驶场景的语义分割数据集Cityscapes。 1. Cityscapes数据集简介 在几个月的时间里&#xff0c;在 50 个城市的春季、夏季和秋季&#xff0c;主要是在德国&#xff0c;但也在邻近国家/地区&#xff0c;从移动车辆中获取了数十万帧。它们不是故意在恶劣的天气条…

NPM 制作命令行工具 - 入门案例

一、简介 经常通过 npm 安装 vue-cli、create-react-app 之类的命令行工具&#xff0c;那么如何简单的制作一个命令行工具呢&#xff1f;只需要几步即可&#xff01; 二、制作 创建 npm 命令行工具文件夹&#xff08;例如&#xff1a;dzm-cli&#xff09; 初始化 dzm-cli&am…