Linux下守护进程的创建

【C/C++】Linux多进程开发 提示:这里可以添加本文要记录的大概内容:提示:以下是本篇文章正文内容,下面案例可供参考并行与并发01 /进程间通讯概念◼ 进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。◼ 但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信( **IPC:Inter Processes Communication** )。 阅读详情
 
Linux下守护进程的创建有很多的方法,比如我们可以使用cron,inetd等程序来创建。这里我们介绍在控制终端上有用户来启动的守护程序。这种守护程序不依赖于任何一个终端,不会随着用户的退出而结束。这种程序经常用于网络程序之中。
-----------------------------------------------------------
原型   pid_t fork(void);  创建子进程
头文件
       #include <sys/types.h>
       #include <unistd.h>
 
描述
    利用fork创建的子进程仅与父进程在PID和PPID上有不同,并且实事上资源的使用也是各自独立的,都是通过相对地址访问的(逻辑首地址都是0)。 文件locks和pending signals不被继承。
    
返回值
    如果成功, 在父进程中执行的则返回子进程的PID,在子进程中执行的则返回0 ;如果失败,在父进程下将返回-1,并且不会有子进程被创建。 
-----------------------------------------------------------
 
将一个程序变为守护程序一般按照下面的步骤: 
调用函数fork,然后父进程退出,这样子进程就变成了后台进程了。同时子进程变成为进程组的组长(组长可能是父进程或者是创建父进程的进程)为第二步系统调用setsid做准备。 
调用setsid创建一个新的会议组,进程成为一个新的会议组的组长。这样这个会议组就不再控制终端了。
 -----------------------------------------------------------
setsid();
描述
       在新的session中运行一个程序。 
-----------------------------------------------------------
 
添加信号SIGHUP的处理。为后面的会议组长退出作处理。同时再一次调用fork。然后父进程退出。由于进程组长退出时向所有会议成员发出SIGHUP,所以我忽略这个信号。这样我们的这个进程就没有控制终端了。
 
调用函数chdir将进程的工作目录改到根目录(/)。这样我们的程序可以不占用某一个可卸载的设备。防止root卸载设备时系统报告设备忙。
 
关闭所有的文件描述符,同时重定向3个标准文件描述符。
 
下面的程序将创建一个守护程序,这个程序重定向了标准输出,标准输入,和标准错误输出。每分钟向标准错误输出可用的系统内存页数。
////////////////////////// fock_test1.c /////////////////////////////
 
#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <time.h>
#include <fcntl.h>
 
int main(int argc, char **argv)
{
    struct sigaction act;
    int error, in, out;
    time_t now;
    int memory;
 
    /* 父进程退出 */
    if(fork() != 0)   exit(1);
 
    /* 创建一个新的会议组 */
    if(setsid() < 0)   exit(1);
 
    /* 忽略信号SIGHUP */
    act.sa_handler = SIG_IGN;
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
    if(sigaction(SIGHUP, &act, NULL) == -1)     exit(1);
 
    /* 子进程退出,孙进程没有控制终端了 */
    if(fork() != 0)     exit(1);
 
    if(chdir("/") == -1)     exit(1);
 
    /* 标准错误重定向 */
    error = open("/tmp/error", O_WRONLY|O_CREAT, 0600);
    dup2(error, STDERR_FILENO);
    close(error);
 
    /* 标准输入重定向 */
    in = open("/tmp/in", O_RDONLY|O_CREAT, 0600);
    if(dup2(in, STDIN_FILENO) == -1)    perror("in");
    close(in);
 
    /* 标准输出重定向 */
    out = open("/tmp/out", O_WRONLY|O_CREAT, 0600);
    if(dup2(out, STDOUT_FILENO) == -1)    perror("out");
    close(out);
 
    while(1)
    {
        time(&now);
        memory = sysconf(_SC_AVPHYS_PAGES);
        fprintf(stderr, "时间/t%s/t/t可用内存[%d]/n", ctime(&now), memory);
        sleep(10);
    }
    exit(0);
}
运行这个程序后,使用ps -x命令可以看到这个程序的tty是?表示这个程序没有控制终端。
        程序运行过程中如果你修改了程序的参数,则必然希望程序重新导入参数,那么你可以用ps命令查看程序的进程号:
ps -ef|grep fock_test1
如果想要终止程序(2296这个值视本地系统而异):
kill  2296
 
 
 
 
 
【Linux】守护进程详解及创建方法实战 守护进程(daemon)是一种特殊的进程,没有控制终端,随系统关闭而终止。Linux系统中有很多守护进程,它们对于系统的正常运行至关重要。 阅读详情

相关推荐

浅析Linux守护进程、守护进程的创建步骤

何为守护进程 、进程组 / 组长进程 / 会话 / 会话首进程 、守护进程的创建步骤 、创建守护进程程序示例

ZY-JIMMY 2468

Linux c/c++之进程的创建

方式一: 使用system函数 特点: 当进程被创建之后,当前进程不再执行(处于挂起状态) 待被创建进程执行结束之后当前进程继续执行 #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main(){ printf("先休息再工作\n"); sleep(5); for (int i = 0; i < 5; ++i) { printf("子进程pid:%d\n",getpi

ShiXiAoLaNga的博客 7026

进程和线程的创建(linux) 源代码

1. 在linux下编写一个应用程序,命名为an_ch2_1b。这个程序不断地输出如下行: Those output come from child,[系统时间] 另外写一个应用程序,命名为an_ch2_1a。这个程序创建一个子进程,执行an_ch2_1b。这个程序不断地输出如下行: Those output come from child,[系统时间] 观察程序运行的结果,并对你看到的现象进行解释。 2。在linux环境下编写一个控制台应用程序,程序中有一个共享的整型变量shared_var,初始值为0;创建一个线程并使其立即与主线程并发执行。新创建的线程与主线程均不断地循环,并输出shared_var 的值。主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1。观察程序运行的结果,并对你看到的现象进行解释。

Linux - 进程控制(上篇)- 进程创建 和 进程终止

对于进程的创建,你肯定知道,在 C/C++ 当中使用 fork()函数,以当前可执行程序生成的进程为 父进程,创建这个父进程的 一个子进程,这个 子进程就是一个新的进程。如上图所示:刚开始创建出子进程之时,甚至父子进程的 页表 ,数据 和 代码都可以是共用的,当 子进程 有修改操作之时,才会发生写时拷贝,拷贝子进程修改之后需要有用到的数据。当父进程 执行到 fork()函数之时,就会在内核当中去找到 fork()函数定义,调用 fork()函数创建子进程,此后,就从fork()函数之后,父子进程就会各自执行

chihiro1122的博客 865

linux下的C\C++多进程多线程编程实例详解

主要介绍了linux下的CC++多进程多线程编程实例详解的相关资料,需要的朋友可以参考下

【项目案例】前后端分离项目 【Web图书管理系统 】SpringBoot + Vue + Element UI + Mysql

Web图书管理系统

激流丶的博客 5397

C/C++ Linux进程操作

进程操作,多进程高并发设计,孤儿进程,僵尸进程,守护进程!

cpp_learner的博客 2412

Qt C++:跨平台开发利器

摘要: Qt C++是基于C++的跨平台开发框架,通过元对象系统、信号槽机制及模块化架构实现"一次编写,多端部署"。核心特性包括: 跨平台能力:覆盖桌面(Windows/macOS/Linux)、移动端(iOS/Android)、嵌入式及WebAssembly; 信号与槽:替代传统回调,实现对象间高效通信; UI组件库:200+预制组件支持QSS样式定制; 工具链:Qt Creator集成开发环境提供可视化设计、调试及多平台编译。 广泛应用于工业控制、车载系统、医疗设备及跨平台应用开发,

2202_75382767的博客 1682

Linux&C++(11):创建一个进程

Linux的0、1和2号进程整个linux系统全部的进程是一个树形结构。0号进程(系统进程)是所有进程的祖先,它创建了1号和2号进程。(相当于是我们世界的时间线)1号进程(systemd)负责执行内核的初始化工作和进行系统配置。2号进程(kthreadd)负责所有内核线程的调度和管理。如何创建一个子进程使用fork函数,使用fork函数创建的进程称为子进程,子进程和父进程共同执行fork函数及fork函数之后的代码。

m0_64956304的博客 997

知识图谱-Neo4j-开始构建知识图谱-01

关系(Relationships):连接两个节点,具有方向(→ 或 ←)和类型(Type),可附加属性。 属性(Properties):键值对,存储节点或关系的详细信息(如 , )。 (2) Cypher 查询语言 直观语法:通过模式匹配直接描述图结构。 高效遍历:支持复杂关系路径查询(如最短路径、模式匹配)。 3. 核心优势 (1) 原生图存储 物理存储优化:数据以图结构直接存储,避免传统数据库的“表连接”开销。 高效遍历:通过指针直接访问相邻节点,时间复杂度接近 O(1)。 (2) 高性

寓教于乐。教己助人 1万+

VS2022配置Qt6

VS2022配置QT教程

Life is a struggle ! 6360

Linux 守护进程的创建

Linux守护进程 1、 守护进程是linux三种进程之一 通常在系统启动时运行,系统关闭时结束 linux系统中会大量使用,很多服务程序都是以守护进程的方式运行 2、 守护进程的特点 1)始终在后台运行,不会影响前台进程的运行 2)独立于任何终端,不能输入也不能输出 3)周期性的执行某种任务或者等待处理特定事件 3、会话,控制终端 linux以会话,进程组的方式来管理进程 进程组:每个进程属于一个进程组//创建一个新的进程就相当于创建了一个进程组,该进程组的子进程也属于该进程组 会话:是一个或..

Hahahlqz的博客 468

ubuntu 20.04系统离线安装nfs

ubuntu环境下,离线安装nfs

m0_62464865的博客 2241

linux下如何创建守护进程,linux下如何创建守护进程的步骤

linux下如何创建守护进程的步骤发布时间:2020-08-26 03:21:32来源:脚本之家阅读:151作者:xld_hung栏目:服务器这两天学习了linux 守护进程这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。1,进程的概念:程序的一次动态执行过程。进程存在于内存当中,存在着 创建,调度,执行和消亡,进程号是进程的唯一标志,每一个进程都有自己独立的内存空间,在32位操作系...

weixin_27183235的博客 515

Cesium体渲染实战:从医学CT到气象数据的3D可视化全攻略

本文详细介绍了如何利用Cesium体渲染技术实现医学CT和气象数据的3D可视化。从数据预处理到交互式渲染,涵盖了DICOM和NetCDF格式的处理技巧,以及性能优化的实战策略,帮助开发者高效处理复杂的三维数据集。

weixin_28717431的博客 420

SAP 管道业务(Pipeline Procurement)是用于水、电、气等不间断供应且无库存管理的物料采购场景,核心是消耗即记账、无库存持有,通过 MM-FI 集成实现实时负债与成本过账

摘要:SAP管道业务适用于水电气等无库存管理的物料采购场景,通过消耗即记账机制实现实时负债与成本过账。核心配置包括创建PIPE物料类型(无库存管理)、维护管道采购信息记录、配置自动记账科目等。SAP PO可集成外部系统实现流程自动化,如自动过账提取数据、发票校验等。实施要点在于物料主数据、信息记录和科目确定的精准配置,以及PO接口的可靠对接,最终构建端到端的高效采购与财务结算体系。

金牌架构师 748

linux 如何创建守护进程

转自出处

martin_liang的专栏 1082

黑猫带你学eMMC协议第1篇:全网最全emmc协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

黑猫带你学eMMC协议第7篇:全网最全emmc写保护详解(write protect) 黑猫带你学eMMC协议第8篇:emmc可靠写详解(Write Reliability) 黑猫带你学eMMC协议第9篇:emmc的分区配置(partitioning) 黑猫带你学eMMC协议第10篇:eMMC命令队列详解(CMDQ) 黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim…) 黑猫带你学eMMC协议第12篇:

黑猫奥利奥的博客 2万+

linux创建守护进程

linux创建守护进程

qq_46017342的博客 696

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LINUX 会话 与守护进程创建

创建会话 6点注意事项 调用进程不能是进程组组长,该进程变成新会话的首进程 该进程成为一个新进程组的组长进程 新会话丢弃原有的控制终端,该会话没有控制终端 该调用进程是组长进程,则出错返回 有些系统需有root 权限 建立新会话时,先调用fork,父进程终止,子进程调用setsid 守护进程 Daemon(精灵)进程,是linux 中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发送的事件,一般采用以d结尾的名字命名。 创建步骤 fork 子进程,让父进程终止 子进程调用se

D&T的博客 259

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

linux守护进程的创建过程,Linux下守护进程的创建过程

linux 守护进程1.创建子进程,父进程退出守护进程是脱离终端的,此时的子进程由1号进程领养。2.在子进程中创建新的会话调用setsid()函数,作用有三个,让进程摆脱原会话的控制;让进程摆脱原进程组的控制;让进程摆脱原控制终端的控制这里需要介绍进程组和会话组的概念进程组:是一个或多个进程的集合,由进程组ID来唯一标识,进程组组长的进程号等于该进程组的ID,且组长进程的退出不会影响该ID。会话组...

weixin_35618325的博客 335

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

linux 守护进程_linux下如何创建守护进程的步骤

1,进程的概念:程序的一次动态执行过程。 进程存在于内存当中,存在着 创建,调度,执行和消亡,进程号是进程的唯一标志,每一个进程都有自己独立的内存空间,在32位操作系统中,进程拥有0-4G的内存空间,其中0-3G属于用户,3G-4G属于内核,所以就出现了进程的执行模式:用户模式和内核模式。 2,进程的类型:交互进程,批处理进程,守护进程 3,守护进程:Linux中的后台服务进程,daemon进程 ...

weixin_40001245的博客 226

Linux入门:创建守护进程

创建守护进程(fork一次与fork两次)

if9600的博客 3264

Linux 守护进程创建

1. 守护进程: 是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。守护进程常常在系统启动时开始运行,在系统关闭时终止 2. 创建守护进程的步骤:   1)创建子进程,父进程退出fork();   2)在子进程中创建新会话 setsid();   3)改变当前目录为根目录chdir("/")...

weixin_34111790的博客 166
下一篇: 用虚拟机在FC6下安装VMware tools心得
导弹头
博客等级 码龄21年 18粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

导弹头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值