【Linux】守护进程

这篇具有很好参考价值的文章主要介绍了【Linux】守护进程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

背景知识

守护进程

什么是守护进程

如何成为守护进程

如何使用守护进程


 

背景知识

  •  前台进程

        和终端关联的进程,叫做前台进程。

        Linux下,默认前台进程是bash。一般来说,前台进程能正常获取用户的输入,并对输入做处理,例如我们输入ls,便会显示当前文件夹下的所有文件。

【Linux】守护进程,linux,运维,服务器,守护进程,网络

        但是当我们运行服务器server时,此时只有服务器可以接收我的正常输入,bash接收不到也无法作出响应了,此时server便成了前台进程,bash便不再是了。

【Linux】守护进程,linux,运维,服务器,守护进程,网络

  • 任何xshell登录,只允许有一个前台进程和多个后台进程. 
  • 进程除了有自己的pid,ppid还有一个组id(PGID).
  • 在命令行中,同时用管道启用多个进程,多个进程是兄弟关系,父进程都是bash --->所以可以用匿名管道进行通信.

【Linux】守护进程,linux,运维,服务器,守护进程,网络

        可以看到三个通过管道的进程,ppid都是bash.

  • 同时被创建的多个进程可以成为一个进程组,组长一般是第一个进程。

还是上面那张图,三个进程的PGID都和第一个一致.

  •  任何一次登陆,登录的用户,需要有多个进程(组)来为用户服务的.用户自己可以启动很多进程,或进程组,我们把给用户提供服务的进程或者用户自己所启动的所有的进程或服务,整体是要属于一个叫做会话的机制中的.
  • SID(Session ID)是一个与进程相关的标识符,用于识别进程所属的会话。每个会话可以包含多个进程,而会话的创建是由终端或登录会话触发的。

例如,我们再启动一个终端,同样执行sleep:

【Linux】守护进程,linux,运维,服务器,守护进程,网络

它们的SID是不同的,说明会话也是不同的.

 

守护进程

什么是守护进程

        守护进程(Daemon process)是在操作系统中以一种特殊的方式运行的后台进程。它在系统启动时被启动,并持续运行,独立于任何用户会话。守护进程通常不与终端或控制台交互,它在后台默默地执行特定的任务或提供某种服务。

          在linux下,当我们登录时,会自动为我们创建一个会话,然后启用多个为用户提供服务的进程,例如bash等,它们自成一个进程组。

        然后就是用户自己创建进程或进程组等操作。如下图:

【Linux】守护进程,linux,运维,服务器,守护进程,网络

那么如果一个进程独立于这个会话外,然后自成一个会话,此时这个进程叫做守护进程。

【Linux】守护进程,linux,运维,服务器,守护进程,网络


如何成为守护进程

        那么一个进程如何自称一个会话,成为守护进程呢,这里需要用到setsid()函数。

函数原型如下:

pid_t setsid(void);

该函数会将调用该函数的进程 变为守护进程。但是该进程不能是进程组的组长。

        就好比你在一家公司是一个项目的组长,手下有很多组员,掌握着很多项目相关的东西。假设一天你要离职,老板也不会同意,你走了那些成员怎么办呢,谁来管理那些项目呢,所以不能能离职。那如果只是一个组员,一个员工,要去离职,便没有什么顾虑了,一般可以成功。

返回值

        成功会返回该进程程成为会话的SID,失败的话返回-1并且错误码被设置。


如何使用守护进程

这是使用的整体流程:

    1.忽略信号.SIGPIPE,SIGCHLD(具体原因上一章有说明)

    2.不要让自己成为组长.(创建子进程,使子进程来变成守护进程)

    3.子进程调用setsid.

    4.将标准输入,标准输出,标准错误重定向,守护进程不能直接向显示器中打印信息.(可以重定向到/dev/null,该文件是一个特殊的设备文件,它丢弃一切写入其中的数据,读取它则会立即得到一个EOF。又称作“黑洞文件”).

代码如下:

#pragma once 
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

using namespace std;

void myDaemon()
{
    //1.忽略信号,SIGPIPE,SIGCHLD
    signal(SIGPIPE,SIG_IGN);
    signal(SIGCHLD,SIG_IGN);

    //2.不要让自己成为组长,让父进程直接退出,子进程继续执行
    if(fork() < 0) exit(0);
    //3.调用setsid
    setsid();
    //4.标准输入,标准输出,标准错误的重定向,守护进程不能直接想显示器中打印信息
    int devnull = open("/dev/null",O_RDONLY,O_WRONLY);
    if(devnull > 0)
    {
        dup2(0,devnull);
        dup2(1,devnull);
        dup2(2,devnull);
        
        close(devnull);
    }
}

然后我们添加在服务器开始代码之前:
【Linux】守护进程,linux,运维,服务器,守护进程,网络

这样就完成了守护进程的基本使用了.我们来看看效果:

 【Linux】守护进程,linux,运维,服务器,守护进程,网络

我们发现,此时再运行服务器端便不再向以前那样卡着等待客户端的链接和请求了,而是直接自己独立成为了一个会话,此时我们再利用客户端链接:

【Linux】守护进程,linux,运维,服务器,守护进程,网络 

发现依然可以正常链接且提供正常的服务。这便是守护进程的好处。

至此守护进程的讲解完成了。 文章来源地址https://www.toymoban.com/news/detail-683368.html

到了这里,关于【Linux】守护进程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 运维 | 查看 Linux 服务器 IP 地址

    大多数在操作 Linux 系统时,我们经常需要知道服务器的 IP 比便于后续的一系列操作,这时候有快速查看主机 IP 的命令行操作,能够有效的帮助我们 本章节主要记录一些常用查看服务器 IP 的命令,希望对大家有所帮助。 查看 Linux 服务器的 IP 地址的命令大体上有以下几种。

    2024年04月27日
    浏览(81)
  • Linux网络编程二(TCP三次握手、四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

    TCP三次握手 TCP 三次握手 (TCP three-way handshake)是TCP协议建立可靠连接的过程,确保客户端和服务器之间可以进行可靠的通信。下面是TCP三次握手的详细过程: 假设客户端为A,服务器为B 1 、第一次握手(SYN=1,seq=500) A向B发送一个带有SYN标志位的数据包,表示A请求建立连接。

    2024年02月06日
    浏览(62)
  • 【运维】Linux 跨服务器复制文件文件夹

    如果是云服务 建议用内网ip scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来

    2024年02月08日
    浏览(74)
  • linux并发服务器 —— 多进程并发(四)

    程序是包含一系列信息的文件,描述了如何在运行时创建一个进程; 进程是正在运行的程序的实例,可以用一个程序来创建多个进程; 用户内存空间包含程序代码以及代码所使用的变量,内核数据结构用于维护进程状态信息; 进程控制块(PCB):维护进程相关的信息,tas

    2024年02月11日
    浏览(55)
  • 【Linux 服务器运维】定时任务 crontab 详解 | 文末送书

    本文思维导图概述的主要内容: 1.1 什么是 crontab Crontab 是一个在 Unix 和 Linux 操作系统上 用于定时执行任务 的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写, cron 指的是 Unix 系统中的一个后台进程,它

    2024年02月08日
    浏览(92)
  • Linux网络编程二(TCP图解三次握手及四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

    1、TCP三次握手 TCP 三次握手 (TCP three-way handshake)是 TCP协议建立可靠连接 的过程,确保客户端和服务器之间可以进行可靠的通信。下面是TCP三次握手的 详细过程 : 假设客户端为A,服务器为B。 (1) 第一次握手 第一次握手(SYN=1,seq=500) A向B发送一个带有 SYN 标志位的数据包,

    2024年04月22日
    浏览(55)
  • Linux服务器上查询进程 ps aux

    在Linux服务器上查询进程,有以下几种方法: 使用ps命令。这个命令用于报告当前系统的进程状态。可以用以下方式使用ps命令来查看进程信息: ps aux:显示系统中所有进程的信息。 ps -e:显示所有进程的信息。 ps -f:显示进程的所有信息。 ps -l:以长格式显示进程信息。

    2024年02月05日
    浏览(61)
  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(67)
  • Linux服务器中查看进程的四种方法

    1. 使用 ps aux 命令来查看,能以简单列表的形式显示出进程信息 ps aux 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序. ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进

    2024年02月02日
    浏览(42)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包