首页 > 系统相关 >守护进程相关

守护进程相关

时间:2022-12-12 15:26:14浏览次数:35  
标签:控制 一个 pid 会话 终端 进程 相关 守护

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程最重要的特性是后台运行

比如周期进行系统校验的进程

1、进程组

进程组就是一个或多个进程的集合。这些进程并不是孤立的,他们彼此之间或者存在父子、兄弟关系,或者在功能上有相近的联系。每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构,进程组的出现是为了统一的管理进程,每个进程能且仅能属于一个进程组。进程组有组号和组长,但是直到组内的所有进程都结束了进程组才会结束

获取当前进程所在的进程组的组ID
pid_t getpgrp(void);
获取指定进程所在的进程组的组ID
pid_t getpgid(pid_t pid);
- pid: 指定的进程的PID
将一个进程送到另外的一个进程组,创建一个新的进程组
int setpgid(pid_t pid, pid_t pgid);
- pid: 要操作的进程的PID
- pgid: 进程组ID

2、会话

一个用户登录一次系统就形成一次会话 。一个会话可包含多个进程组,但只能有一个前台进程组。每个会话都有一个会话首领(leader),即创建会话的进程。一个会话可以有一个控制终端。这通常是登陆到其上的终端设备(在终端登陆情况下)或伪终端设备(在网络登陆情况下)。建立与控制终端连接的会话首进程被称为控制进程

一次登录形成一个会话。一个会话可包含多个进程组,但只能有一个前台进程组。

// 获取进程所属的会话ID
#include <unistd.h>
pid_t getsid(pid_t pid);
返回值:
成功: 会话ID, 失败: -1

#include <unistd.h>
// 创建一个会话
// 在哪个进程中调用该函数, 这个进程就会被提升为会话
// - 没有任何职务的进程才满足条件, 普通的进程
// - 这个普通的进程会脱离原来的操作终端
pid_t setsid(void);

进程属于一个进程组,进程组属于一个会话,会话可能有也可能没有控制终端。

一般而言,当用户在某个终端上登录时,一个新的会话就开始了。进程组由组中的领头进程标识,领头进程的进程标识符就是进程组的组标识符。类似地,每个会话也对应有一个领头进程。

同一会话中的进程通过该会话的领头进程和一个终端相连,该终端作为这个会话的控制终端。一个会话只能有一个控制终端,而一个控制终端只能控制一个会话。用户通过控制终端,可以向该控制终端所控制的会话中的进程发送键盘信号。

同一会话中只能有一个前台进程组,属于前台进程组的进程可从控制终端获得输入,而其他进程均是后台进程,可能分属于不同的后台进程组。

当我们打开多个终端窗口时,实际上就创建了多个终端会话。每个会话都会有自己的前台工作和后台工作。

 

创建守护进程的步骤

- 1. 父进程创建子进程, 杀死父进程 -> 必须
- 2. 将子进程提升为会话 -> 必须
setsid();
- 3. 修改进程的工作目录, 工作目录切换到不能被卸载的目录中: / /home -> 不是必须
目的: 防止有些不安全目录被卸载:
在U盘总启动一个进程, 把U盘拔了, 进程无法正常运行
chdir();
- 4. 修改umask掩码 -> 不是必须
umask();
- 5. 关闭/重定向文件描述符 -> 不是必须
- 标准输入 -> close(0)
- 标准输出 -> close(1)
- 标准错误 -> close(2)
- 重定向: 设备文件: /dev/null ->int fd = open("/dev/null", O_RDWR);
dup2(0, fd)

 

标签:控制,一个,pid,会话,终端,进程,相关,守护
From: https://www.cnblogs.com/uestc-du/p/16976091.html

相关文章

  • Ubuntu20.04 Java相关环境(JDK、Mysql、Redis、nacos、influxdb)部署以及运行
     重装了系统,系统版本号为:Ubuntu20.041、云平台登录云平台,选择要重装的服务器,关机、一键重装即可 2、安装jdk下载jdk-8u341-linux-x64.tar.gz,并复制到服务器目录下,比......
  • fluentd中,当设置多个worker进程时,如何将插件与进程进行绑定?
    设置多worker进程 当通过如下的命令,设置多个worker进程时: <system>workers4</system> 示例配置 可以特定的插件与进程进行绑定,如:<system>worke......
  • Centos7 查看磁盘i/o, 定位占用i/o读写高的进程
     Centos7查看磁盘i/o,定位占用i/o读写高的进程概要:1、iostat用法2、先用iostat查看磁盘io是否读写负载很高3、找出使用io高的进程的工具iotop4、lsof查......
  • fluentd中,如何设置多个worker进程?
    在fluentd中,可以设置多个worker进程,来提高日志采集、处理的效率 设置方法如下:<system>workers4</system>  修改配置前: 1个守护进程,1个worker进程 ......
  • 与机器学习相关的数学家,你认识几个?
    机器学习,需要一定的数学基础,也需要一定的代码能力。我们发布了一篇《​​机器学习的数学基础​​》,里面有很多数学公式是数学家的名字命名的,然而,好多人不知道那些数学家长什......
  • 进程通信之管道
    写在前面今天主要的任务就是知道什么是进程通信?进程通信是如何实现的?前面我们学习了基础IO,再往前看又学习进程的相关的概念,那么今天我们通过进程的通信来把他们用起来.......
  • vscode Remote-SSH 相关问题
    1.远程连接时一直提示重复输入密码在vscode菜单栏里点击"查看"->"命令面板"输入remote-ssh:killvscodeserveronhost选择连接有问题的host重新输入密码即......
  • HarmonyOS实现登录页面(二)相关api的创建(IDEA)
    创建步骤如何在IDEA里面创建相关程序创建成功后,上来一顿删除文件直到如下图新建3个包commoncontrollermodel在cotroller下面建类ApiController在model......
  • HarmonyOS实现登录页面(一)相关html代码(部分),js代码
    首先在HarmonyOS中和vue不一样数据不是双向绑定。为了页面简洁,样式相关代码一律忽略on:change="changeUsername"表示当输入框的值发送变化的时候调用对应函数changeU......
  • typecho 分类相关
    1.数据库SQL后台删除的文章,关联分类不会自动删除,就是relationships表里面的cid和mid的对应关系不会被删除2.博客后台删除文章时,会自动删除relationships里面的对应关系,也......