守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同 Unix环境下守护进程的编程规则并不一致。需要注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。下面将给出Linux下守护进程的编程要点和详细实例。
一. 守护进程及其特性
守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是 shell)执行。
总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。如果对进程有比较深入的认识就更容易理解和编程了。
二. 守护进程的编程要点
前面讲过,不同Unix环境下守护进程的编程规则并不一致。所幸的是守护进程的编程原则其实都一样,区别在于具体的实现细节不同。这个原则就是要满足守护进程的特性。同时,Linux是基于Syetem V的SVR4并遵循Posix标准,实现起来与BSD4相比更方便。编程要点如下;
1. 在后台运行。
为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
if(pid=fork())
exit(0); //是父进程,结束父进程,子进程继续
2. 脱离控制终端,登录会话和进程组
有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长:
setsid();
说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
3. 禁止进程重新打开控制终端
现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:
if(pid=fork()) exit(0); //结束第一子进程,第二子进程继续(第二子进程不再是会话组长)
你了解过Linux后台服务进程的开发过程?
- Linux(206513)
- 后台(7722)
相关推荐
Linux使用Systemd管理进程服务
今天浩道跟大家分享linux运维中大家很少用到的一个硬核干货,使用 Systemd 管理进程服务。让你体验一下该技巧带来的便捷性!
2022-12-12 09:02:59323
Linux下进程间如何实现共享内存通信
这次我们来讲一下Linux进程通信中重要的通信方式:共享内存作为Linux软件开发攻城狮,进程间通信是必须熟练掌握的重要技能,而共享内存是在程序开发中常用的也是重要的一种进程间通信方式。
2023-04-26 17:14:47560
Linux Shell多进程并发以及并发数控制
Linux Shell多进程并发以及并发数控制1. 基础知识准备1.1. linux后台进程Unix是一个多任务系统,允许多用户同时运行多个程序。shell的元字符&提供了在后台运行不需要
2017-08-28 15:53:27
Linux 查看进程和删除进程
还是用于监控后台进程地工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信地,所以如果需要检测其情况,便可以运用 ps 命令了.该命令语法格式如下:ps [选项]-e 显示所有进程
2016-04-24 00:04:10
Linux开发板上的SSH服务移植过程
SSH服务可以很方便的通过网络登录到Linux开发板,同时支持SFTP协议向开发板传输文件。下面简单讲下移植过程。开发板环境:名称:imx283内核:Linux2.6.35.31.下载源码zlib
2021-11-04 08:22:40
Linux内核创建新进程的过程分析
PCB包含了一个进程的重要运行信息,所以我们将围绕在创建一个新进程时,如何来建立一个新的PCB的这一个过程来进行分析,在Linux系统中,PCB主要是存储在一个叫做task_struct这一个结构体中,创建新进程仅能通过
2019-08-08 08:42:58
Linux启动过程详解
1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命
2021-11-02 07:01:06
Linux基础
、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。 四:Linux网络编程 计算机网络在嵌入式Linux系统应用开发过程
2017-08-03 09:46:54
Linux守护进程
1.守护进程概述 守护进程,也就是通常所说的daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常
2013-08-22 09:17:30
Linux平台搭建与环境熟悉
解析5、Linux内核编译链接6、内核模块编译、使用方法第六部分:LINUX根文件系统1、busybox 包移植、编译2、Linux跟文件系统制作过程3、根文件系统介绍4. nfs文件服务器系统搭建
2019-05-19 08:30:00
linux如何开启telnet服务
1。基础知识linux提供服务是由运行在后台的守护程序(daemon)来执行的。守护进程的工作就是打开1个端口(port),等待(listen)进入的连接。在C/S模式中,如果客户提请了1个连接,守护进程就创建(fork)子进程来响应这个连接,而父进程继续监听其他服务的请求。
2019-07-23 07:34:12
了解嵌入式系统学习的步骤
1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命
2013-02-25 09:51:20
FPGA开发的完整的流程及开发过程中使用到的开发工具有哪些?
本文以Altera公司的FPGA为目标器件,通过开发实例介绍FPGA开发的完整的流程及开发过程中使用到的开发工具,包括QuartusII、FPGA CompilerII、Modelsim,并重点解说如何使用这三个工具进行协同设计。
2021-04-29 06:04:13
HarmonyOS后台任务管理开发指南上线!
为什么要使用后台任务?开发过程中如何选择合适的后台任务?后台任务申请时存在哪些约束与限制?
针对开发者使用后台任务中的疑问,我们 上线了概念更明确、逻辑结构更清晰的后台任务开发指南,包含具体的使用场
2023-11-29 09:58:38
[分享资料]嵌入式Linux应用程序开发详解
`一、看威武霸气的封面作者:孙琼 著 二、读读简介,看看适合你吗?Linux基础部分从Linux的安装过程、基本操作命令讲起,为Linux初学者能快速入门提供了保证。接着系统地讲解了嵌入式
2015-09-11 23:25:38
nodemcu的开发过程是怎样的
关于nodemcu的点点滴滴##### 讲网络协议之前,我觉得应该把nodemcu的开发过程梳理一遍,再说下自己调试遇到的问题。- 因为自己也是刚接触lua和esp12,理解上可能会有很多错误,希望
2022-02-16 06:25:29
openharmony组件开发过程中,hi3516打开烧录进去的hap包显示蓝屏怎么解决
进行openharmony组件开发过程中,hi3516打开烧录进去的hap包显示蓝屏运行的hap包是官方的jsholleworld,上图是打开app时后台显示的信息与设备的显示画面
2022-04-13 11:28:07
【开发教程1】手把手教你做平板电脑-Linux 引导过程
Linux 引导过程——疯壳·嵌入式平板开发Linux 内核与 Android 系统 linux 内核有什么区别? 什么是引导装载程序?什么是 Zygote? 什么是 init.rc?什么是系统服务
2022-08-04 18:55:46
【HarmonyOS IPC 试用连载 】“后台服务”虚拟机 ➕ 一个软件搞定远程、编译、烧录
接下来按照官方文档把环境编译好,这种教程太多了,我就不写了。[size=18.6667px]一、“后台服务”虚拟机1.这里假设虚拟机的开发环境已经配置好了,在搭好环境的虚拟机上右击“创建桌面快捷方式
2020-10-22 12:41:08
【分享】4412开发板-嵌入式Linux开发需要掌握的基础知识和技能
概述 交叉编译 配置TFTP服务 配置NFS服务 下载Bootloader和内核 嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程 建立嵌入式系统开发环境制作cross_gcc工具链 编译
2015-07-16 14:08:08
【北京】诚聘C++高级开发工程师-互联网公司
猎头推荐职位:C++高级开发工程师工作职责:1. 负责后台服务的功能设计、开发以及优化;2. 优化后台服务架构,构建高并发低延迟后台系统,解决性能瓶颈问题;任职要求:1. 熟悉nginx,mysql
2017-07-04 14:02:59
【嵌入式开发教程1】疯壳·平板电脑-Linux 引导过程
Linux 引导过程——疯壳·嵌入式平板开发Linux 内核与 Android 系统 linux 内核有什么区别? 什么是引导装载程序?什么是 Zygote? 什么是 init.rc?什么是系统服务
2022-07-18 17:06:00
【苏州】诚聘Java后端开发工程师
完整的技术开发经验;2.本科学历,计算机相关专业背景,硕士生及以上优先;3.精通MVC、HTTP Restful后台服务、微信、PHP、Websocket、MySQL、NoSQL(Redis)开发
2017-07-17 09:53:34
【鸿蒙编译烧录】“后台服务”虚拟机 ➕ 一个软件搞定远程、编译
:https://www.virtualbox.org/wiki/Downloads 接下来按照官方文档把环境编译好,这种教程太多了,我就不写了。 一、“后台服务”虚拟机这里假设虚拟机的开发环境已经配置
2020-10-29 11:20:16
几种Linux下后台启动jar包的方法介绍
当我们使用SpringBoot的方式开发好了我们的应用,放到我们的Linux服务器上准备上线,首先想到的可能就是通过 java -jar xxx.jar 的方式来运行我们的jar包,程序运行正常
2019-07-22 08:02:42
初学者嵌入式linux系统的学习步骤
Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识
2019-01-18 10:34:44
前台运行和后台运行二者有何区别
开发环境:DeepIn15.11 开发语言:C语言 测试软件:Final Shell3.0.10 目录分清你的程序是前台运行还是后台运行,二者有何区别 前台运行和后台运行的区别 前后台程序生成
2021-11-04 08:18:50
北京鼎普诚聘linux开发工程师
、网络编程等开发基础。4. 了解汇编语言、编译原理的基础知识。5. 熟悉linux设备驱动,从事过linux内核开发。6. 精通linux环境基本系统调用原理和机制。7. 熟练掌握linux操作系统
2014-01-13 10:03:45
在嵌入式linux开发过程中遇到的坑
目标 博文旨在总结自己在嵌入式linux开发过程中遇到的坑⛈、一些小知识点的汇总。☔等哪天发展到远离代码了,还能回一下当年的英姿。
2021-11-05 09:06:58
如何学习嵌入式系统基础知识
转发:如何学习嵌入式系统基础知识,不错资料1、Linux 基础安装Linux操作系统:Linux文件系统 ,Linux常用命令,Linux启动过程详解,熟悉Linux服务能够独立安装Linux
2017-09-13 11:04:17
学习python人工智能,需要了解的Linux系统进程知识大汇总!
学习Python人工智能时,需要了解Linux系统进程知识,以下是对Linux系统进程知识的汇总:当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程
2018-07-03 18:04:44
寻找!嵌入式linux利用web端服务器升级
利用http搭建一个服务器,通过web端操作,+后台服务端+终端升级嵌入式linux通过服务端后台对设备进行远程升级升级内容:内核、驱动、文件系统、应用程序或者某些配置文件想寻找有关的项目源码学习,希望得到相关指点,谢谢!!
2021-06-24 11:11:03
嵌入式Linux开发哪个进程被误杀了
背景: 开发过程中发现自己的某个进程被莫名其妙的杀死了,概率性的,不好查。想知道是被哪个进程给误杀了Linux kernel 版本: linux-3.18.20audit 版本
2021-12-15 08:54:10
嵌入式Linux开发学习如何入门、如何深入?
学习步骤如下: 1、Linux 基础安装Linux操作系统Linux文件系统Linux常用命令Linux启动过程详解熟悉Linux服务能够独立安装Linux操作系统能够熟练使用Linux系统
2016-10-14 14:37:33
嵌入式Linux开发学习如何入门、如何深入?
学习步骤如下:1、Linux 基础安装Linux操作系统Linux文件系统Linux常用命令Linux启动过程详解熟悉Linux服务能够独立安装Linux操作系统能够熟练使用Linux系统的基本命
2014-07-08 11:03:55
嵌入式Linux开发工程师的成长过程
详解嵌入式Linux工程师的成长经历嵌入式资讯精选2018-03-23学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步。下面是嵌入式Linux开发
2021-11-05 06:54:36
嵌入式Linux学习步骤
1、 Linux 基础 安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统
2011-05-04 15:01:53
嵌入式Linux学习步骤
【分享-发烧友】新手必看--嵌入式Linux学习步骤1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装
2015-03-24 10:41:29
嵌入式Linux学习步骤
嵌入式Linux学习步骤 1、Linux 基础 安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练
2018-07-03 00:56:23
嵌入式Linux系统开发学习路线
等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。 四:Linux网络编程 计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,通过
2016-09-21 10:09:23
嵌入式linux学习步骤
1、 Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命
2017-10-25 10:12:39
嵌入式linux学习步骤
1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命
2021-09-08 11:51:06
嵌入式linux学习步骤
1、Linux基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识
2016-09-12 14:23:18
嵌入式系统的开发过程
一、嵌入式系统的开发过程嵌入式系统的开发过程一般包括需求分析、系统设计、系统实现、系统设计、系统发布5个阶段。需求分析阶段是通过与用户反复沟通,加工确定原始需求(包括功能性需求和非功能性需求),确定
2021-12-22 06:34:54
新手必看--嵌入式Linux学习步骤
1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命
2016-03-25 14:53:55
新手必看--嵌入式Linux学习步骤,教你怎么入门
1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命
2014-06-30 11:23:21
疯壳Android嵌入式Linux平板开发教程4-1Linux引导过程
/su_fHnaDyD1o.jspLinux引导过程Linux内核与Android系统linux内核有什么区别?什么是引导装载程序?什么是Zygote?什么是init.rc?什么是系统服务?第一节Android启动步骤
2021-02-19 14:36:28
鸿蒙 Ability 讲解(页面生命周期、后台服务、数据访问)
和 Data Ability 我相信你知道它们的意思,就是服务能力和数据能力。Service用于提供后台运行任务的能力。Data 用于对外部提供统一的数据访问抽象。在配置文件(config.json)中注
2020-12-17 10:37:26
资源约束下产品开发过程仿真模型
提出考虑资源约束的产品开发过程仿真模型。该模型考虑产品开发过程中的返工迭代以及资源约束,根据任务信息控制能力确定任务资源分配的优先级,相对于Cooper 提出的资源分
2009-04-16 11:36:3016
Linux进程管理
Linux进程管理
本章主要介绍进程的概念、状态、构成以及Linux进程的相关知识。
掌握进程的概念
掌握进程的描述、状态及转换
理解进程的特征
2009-04-28 14:57:410
客车产品设计与开发过程中的质量管理
就目前中小型客车生产企业在产品设计、开发过程中存在的问题, 提出抓产品质量应从产品的设计与开发这个源头抓起; 产品设计过程的基础是质量控制。关键词: 客车产品 设计
2009-07-25 16:34:3927
基于PPC8270的BSP开发过程
本文通过对目标机硬件环境初始化过程和硬件驱动开发过程的描述,详细介绍了基于PPC8270的BSP开发过程。在该开发实例中,该BSP软件能够在目标机模块上稳定运行,并为上层操作系统及
2011-07-23 10:32:392574
Linux基础命令之Linux启动过程详解
2.2 Linux启动过程详解 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程。Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识
2017-10-18 14:17:062
Linux基础命令之Linux系统服务解析
2.3 Linux系统服务 init进程的作用是启动Linux系统服务(也就是运行在后台的守护进程)。Linux的系统服务包括两种,第一种是独立运行的系统服务,它们常驻内存中,自开机后一直
2017-10-18 14:25:450
Linux守护进程详解
分享到:标签:进程控制 Linux 守护进程 子进程 7.3 Linux守护进程 7.3.1 守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。它是一个生存期
2017-10-18 14:24:470
GitHub开源软件开发过程影响因素分析
通过分析GitHub开源软件的开发过程,提出了问题解决速度、问题增加速度等影响因素,并对这些影响因素间的相关性进行了分析.经过实验证明了有些影响因素之间存在一定的相关性.同时,根据实验的结果还给出了针对GitHub开源软件开发过程的一些建议.
2017-12-28 11:48:560
Linux进程管理:什么是进程?进程的生命周期
所有运行在Linux操作系统中的进程都被task_struct结构管理,该结构同时被叫作进程描述。一个进程描述包含一个运行进程所有的必要信息,例如进程标识、进程属性和构建进程的资源。如果你了解该进程构造,你就能理解对于进程的运行和性能来说,什么是重要的。图1-2展示了进程结构相关的进程信息概述。
2019-02-15 14:29:067375
学会用日志了解你的 Linux 系统
Linux 系统日志非常重要,后台运行的程序(通常被称为守护进程或者服务进程)处理了你 Linux 系统中的大部分任务。
2019-05-06 16:39:00607
关于Linux进程你所需要知道的一切
# fg %1 Linux 后台进程任务Linux 中进程的状态在执行过程中,取决于它的环境一个进程会从一个状态转变到另一个状态。在 Linux 中,一个进程有下面的可能状态:Running
2019-04-02 14:47:56273
linux的进程怎么查看
在Linux系统中,每个程序启动后可以创建一个或多个进程。例如,提供Web服务的httpd程序,当有大量用户同时访问Web页面时,httpd程序可能会创建多个进程来提供服务。
2020-05-22 08:56:59745
Linux进程权限的分析说明
在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解。但是对进程权限一般知之甚少。本文总结一下linux系统下进程权限问题和现象。
2020-07-17 10:55:32765
嵌入式linux查看服务进程,通过proc查看进程资源
本课程是《嵌入式工程师自我修养》自学教程六步走中的第3步:Linux系统编程第04期。进程,是Linux系统中任务调度运行的基本单元:一个程序的运行,都要被操作系统包装成“进程”,统一管理,调度运行
2021-11-01 17:37:138
linux内核启动过程会执行用户空间的init进程
linux内核启动过程的后期,在kernel_init()函数代表的init线程中,会尝试执行用户空间的init进程
2022-10-14 09:12:28711
如何在Linux终止僵尸进程
在了解Zombie进程之前,让我回忆一下什么是进程。简而言之,进程是程序实例。它可以是前台的交互式进程或后台的非交互式或自动进程。
2022-12-12 17:40:391613
一台服务器最大能建立多少条TCP连接呢?
我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响
2023-02-03 10:11:031349
如何既满足ASPICE要求,又减少开发过程文档
基于我的经验,我把ASPICE中涉及的最重要(最难搞、最难整理、最难出具evidence……)的开发过程文档,分为如下 4 类,如果能使如下4 类开发过程文档的出具变得比较简单,那ASPICE项目的评审时长可以缩短50%以上,项目开发效率也可以提高30%以上。
2023-04-17 14:19:12764
如何读懂FPGA开发过程中的Vivado时序报告?
FPGA开发过程中,vivado和quartus等开发软件都会提供时序报告,以方便开发者判断自己的工程时序是否满足时序要求。
2023-06-26 15:29:05531
后台开发中netstat命令使用方法
后台开发,netstat命令总是绕不过,不仅工作中经常用过,面试也是考的多。netstat命令,对应的选项比较多,功能比较强大。netstat 常用来查看,后台服务进程的相关状态。 netstat
2023-10-08 16:21:34374
HarmonyOS后台任务管理开发指南上线!
为什么要使用后台任务?开发过程中如何选择合适的后台任务?后台任务申请时存在哪些约束与限制? 针对开发者使用后台任务中的疑问,我们 上线了概念更明确、逻辑结构更清晰的后台任务开发指南,包含具体的使用场
2023-11-28 21:10:02376
linux查看weblogic进程
在Linux操作系统中,WebLogic是一种常用的Java应用服务器,用于部署和管理企业级Java应用程序。为了确保WebLogic服务器正常运行,有时我们需要查看WebLogic进程以了解其状态
2023-12-05 16:07:33573
评论
查看更多