任务管理与守护进程【Linux】

news2024/11/15 1:45:02

文章目录

  • 进程组
  • 前台进程&后台进程
  • 守护进程
  • daemon

进程组

在这里插入图片描述
组长是多个进程的第一个,组长进程的标识是,其进程组ID等于其进程ID

前台进程&后台进程

前台进程:能获取键盘输入,即拥有键盘文件
后台进程:不能获取键盘输入,即没有键盘文件

前台进程只能有一个,当一个进程变成前台进程后,bash会自动变为后台进程,此时bash就无法进行命令行解释了。
命令行中前台进程要一直存在 ,不能没有

ctrl + c,可以终止前台进程

./myprocess & ,加了& ,就变成后台进程了

[cxq@iZwz9fjj2ssnshikw14avaZ lesson31]$ ll
total 36
-rw-rw-r-- 1 cxq cxq    90 Jul 15 22:41 Makefile
-rwxrwxr-x 1 cxq cxq 26440 Jul 15 15:31 myprocess
-rw-rw-r-- 1 cxq cxq   443 Jul 15 22:41 mysignal.cc
-rw-rw-r-- 1 cxq cxq     0 Jul 14 16:59 test.c
[cxq@iZwz9fjj2ssnshikw14avaZ lesson31]$ ./myprocess &

Linux中,一次登陆中,一个终端,一般会配上一个bash,每一个登陆,只允讲一个进程是前台进程,但是可以允许多个进程是后台进程

[cxq@iZwz9fjj2ssnshikw14avaZ lesson43]$ ./process  >> log.txt & 
[1] 27184

1: 后台任务号
27184是进程pid

查看后台任务

[cxq@iZwz9fjj2ssnshikw14avaZ lesson43]$ jobs
[1]+  Running                 ./process >> log.txt &

fg,将一个在后台运行的作业(job)调回到前台继续执行

[cxq@iZwz9fjj2ssnshikw14avaZ lesson43]$ jobs
[1]+  Running                 ./process >> log.txt &
[cxq@iZwz9fjj2ssnshikw14avaZ lesson43]$ fg 1 

如果想要重新放回后台 ,ctrl + z

bg 命令用于将一个挂起(stopped)或暂停(suspended)的作业放入后台执行

[cxq@iZwz9fjj2ssnshikw14avaZ lesson43]$ jobs
[1]   Running                 ./process >> log.txt &
[2]-  Running                 ./process >> log.txt &
[3]+  Running                 ./process >> log1.txt &
[cxq@iZwz9fjj2ssnshikw14avaZ lesson43]$ fg 3
./process >> log1.txt
^Z
[3]+  Stopped                 ./process >> log1.txt
[cxq@iZwz9fjj2ssnshikw14avaZ lesson43]$ jobs 
[1]   Running                 ./process >> log.txt &
[2]-  Running                 ./process >> log.txt &
[3]+  Stopped                 ./process >> log1.txt
[cxq@iZwz9fjj2ssnshikw14avaZ lesson43]$ bg 3 
[3]+ ./process >> log1.txt &

守护进程

在这里插入图片描述
关闭xshell后 ,这几个进程TTY就没了 ,与终端无关了 ,PPID全部变成1 ,会话还是保留了关闭xshell前的会话ID,关闭xshell后 ,这几个进程的PID变化了,也就是说这几个进程会受到用户的登陆和注册的影响

守护进程化:不想受到任何用户登陆和注销的影响

守护进程 :自成进程组、自成会话的进程
守护进程的本质,就是孤儿进程

调用setsid创建新会话的目的,是让当前进程自成会话,与当前bash脱离关系

  pid_t setsid(void);

调用setsid创建新会话时,要求调用进程不能是进程组组长,但是当我们在命令行上启动多个进程协同完成某种任务时,其中第一个被创建出来的进程就是组长进程,因此我们需要fork创建子进程,让子进程调用setsid创建新会话并继续执行后续代码,而父进程我们直接让其退出即可

    //父进程退出 ,子进程创建新会话 
   if (fork() > 0)
        exit(0);
    setsid();

功能:网络版少数单词的翻译,涉及到守护进程
Daemon.hpp

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

const std::string nullfile = "/dev/null";
void Daemon(const std::string &cwd = "") // 设置空串为缺省值
{

    // 1. 忽略其他异常信号
    signal(SIGCLD, SIG_IGN);
    signal(SIGPIPE, SIG_IGN);
    signal(SIGSTOP, SIG_IGN);

    // 父进程退出 ,子进程创建新会话
    if (fork() > 0)
        exit(0);
    setsid();

    // 3. 更改当前调用进程的工作目录
    if (!cwd.empty()) // 不为空
    {
        chdir(cwd.c_str());
    }
    // 4. 标准输入,标准输出,标准错误重定向至/dev/null
  int fd =  open(nullfile.c_str(),O_RDWR ); 
      if(fd > 0)
    {
        dup2(fd, 0);
        dup2(fd, 1);
        dup2(fd, 2);
        close(fd);
    }
}

在这里插入图片描述

在这里插入图片描述

ls /proc/4686/fd -l, 系统会显示进程 ID 为 4686 的进程打开的所有文件描述符的详细信息

[cxq@iZwz9fjj2ssnshikw14avaZ lesson42]$  ps ajx | head -1  && ps ajx | grep Tcpserver 
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1  4686  4686  4686 ?           -1 Ssl   1001   0:00 ./Tcpserver 8888
27777 11212 11211 27777 pts/1    11211 S+    1001   0:00 grep --color=auto Tcpserver
[cxq@iZwz9fjj2ssnshikw14avaZ lesson42]$ ls /proc/4686/fd -l
total 0
lrwx------ 1 cxq cxq 64 Sep 16 12:36 0 -> /dev/null
lrwx------ 1 cxq cxq 64 Sep 16 12:36 1 -> /dev/null
lrwx------ 1 cxq cxq 64 Sep 16 12:36 2 -> /dev/null
lrwx------ 1 cxq cxq 64 Sep 16 12:36 3 -> socket:[5908905]

daemon

daemon,创建守护进程

int daemon(int nochdir, int noclose);
  • 如果参数nochdir为0,则将守护进程的工作目录该为根目录,否则不做处理。
  • 如果参数noclose为0,则将守护进程的标准输入、标准输出以及标准错误重定向到/dev/null,否则不做处理。

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

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

相关文章

淘宝商品评论电商API接口全方位解析

随着电子商务的蓬勃发展&#xff0c;API接口在电商领域扮演着越来越重要的角色。淘宝作为国内最大的电商平台之一&#xff0c;其商品评论电商API接口为开发者提供了获取商品评论信息、进行数据分析等重要功能。本文将对淘宝商品评论电商API接口进行全方位解析&#xff0c;帮助开…

商品出库单打印怎么设置打印格式 佳易王商品批发出库单打印票据管理系统操作教程

一、前言 商品出库单打印怎么设置打印格式 佳易王商品批发出库单打印票据管理系统操作教程 佳易王商品出库打印纸张建议使用 241*140 &#xff0c;可根据需要更改或定制 二、软件程序图文说明 1、软件已经内置数据库&#xff0c;解压即可。 2、出库单可以打印两联或三联单或…

Android Kotlin 中的 `groupBy` 方法详解

在 Kotlin 中&#xff0c;groupBy 是一个非常有用的集合操作函数。我们可以使用它按照某个标准&#xff0c;将集合中的元素分组&#xff0c;形成一个 Map&#xff0c;其中 key 是我们分组的标准&#xff0c;value 是符合这个标准的元素列表。本文将通过几个实际例子&#xff0c…

微服务架构中的负载均衡与服务注册中心(Nacos)

1. 负载均衡&#xff1a;解决实际业务问题 1.1 业务场景思考 想象一个电子商务平台的微服务架构。我们有一个订单服务和多个用户服务实例。当订单服务需要调用用户服务时&#xff0c;它如何选择具体调用哪一台用户服务器&#xff1f;这就是负载均衡要解决的核心问题。 1.2 常…

【CAPL实战】system variables系统变量的基础与应用

基础 在CANoe系统中&#xff0c;变量可以用来对内部参数进行建模。系统变量既不描述节点的外部输入/输出信号&#xff0c;也不用于真实节点间的信号通信。系统变量用于开发和测试&#xff0c;提供改变和分析内部变量和参数的机会。通过还可以表示未在数据库中定义的IO信号。&a…

MUR6060PT-ASEMI高压快恢复二极管MUR6060PT

编辑&#xff1a;ll MUR6060PT-ASEMI高压快恢复二极管MUR6060PT 型号&#xff1a;MUR6060PT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-247 安装方式&#xff1a;插件 批号&#xff1a;最新 恢复时间&#xff1a;35ns 最大平均正向电流&#xff08;IF&#xff09;&…

构建高效心理辅导平台:Spring Boot实践

1绪 论 1.1研究背景 随着计算机和网络技术的不断发展&#xff0c;计算机网络已经逐渐深入人们的生活&#xff0c;网络已经能够覆盖我们生活的每一个角落&#xff0c;给用户的网上交流和学习提供了巨大的方便。 当今社会处在一个高速发展的信息时代&#xff0c;计算机网络的发展…

昇思量子计算系列教程-Grover搜索算法

基于MindSpore Quantum的Grover搜索算法 概述 如果你听过量子计算&#xff0c;那么你一定听说过Grover搜索算法。1996年&#xff0c;Lov Grover [1] 提出了Grover搜索算法&#xff0c;它是一种利用量子状态的叠加性进行并行计算并实现加速的算法。Grover搜索算法被公认为是继…

快手店铺多开甜羊浏览器

甜羊浏览器是一款专为电商从业者设计的专业浏览器&#xff0c;其最大的特色在于支持多开功能和具备智能的自动回复系统&#xff0c;尤其适合快手店铺等电商平台的多店铺管理及自动化客服需求。 **多开功能**&#xff1a;甜羊浏览器的多开功能允许用户在同一界面上登录和操作多…

电脑ip地址怎么换地区:操作步骤与利弊分析

在当今全球化的信息时代&#xff0c;人们经常需要访问不同地区的网络资源。然而&#xff0c;由于地理位置的限制&#xff0c;某些内容或服务可能只对特定地区的用户开放。这时&#xff0c;更换电脑IP地址的地区就成为了一个实用的解决方案。本文将详细介绍两种更换电脑IP地址地…

DataGrip在Windows和MacOS平台上的快捷键

0. 背景信息 No.说明1测试DataGrip版本号 : 2024.2.2 1. Windows下快捷键 2. MacOS下快捷键

麒麟银河桌面版,成功安装cuda12.6,mysql

一、 要卸载并禁用 nouveau 驱动程序&#xff0c;可以按照以下步骤进行&#xff1a; 1. 确认 nouveau 驱动的当前状态&#xff1a; 首先&#xff0c;你可以使用以下命令查看 nouveau 驱动是否正在运行&#xff1a; lsmod | grep nouveau如果有输出&#xff0c;说明 nouveau …

Unity3D入门(一) : 第一个Unity3D项目,实现矩形自动旋转,并导出到Android运行

1. Unity3D介绍 Unity3D是虚拟现实行业中&#xff0c;使用率较高的一款软件。 它有着强大的功能&#xff0c;是让玩家轻松创建三维视频游戏、建筑可视化、实时三维动画等互动内容的多平台、综合型 虚拟现实开发工具。是一个全面整合的专业引擎。 2. Unity安装 官网 : Unity…

【有啥问啥】OpenAI o1的思考之前训练扩展定律、后训练扩展定律与推理扩展定律:原理与应用详解

OpenAI o1的思考之前训练扩展定律、后训练扩展定律与推理扩展定律&#xff1a;原理与应用详解 随着深度学习技术的不断发展&#xff0c;模型的规模和复杂度也迅速提升。研究人员发现了模型训练和推理过程中性能变化的规律&#xff0c;这些规律为我们提供了优化模型设计与训练的…

C++ STL全面解析:六大核心组件之一----序列式容器(vector和List)(STL进阶学习)

目录 序列式容器 Vector vector概述 vector的迭代器 vector的数据结构 vector的构造和内存管理 vector的元素操作 List List概述 List的设计结构 List的迭代器 List的数据结构 List的内存构造 List的元素操作 C标准模板库&#xff08;STL&#xff09;是一组高效的…

利用 IDEA 快速管理 k8s 集群

简介 前置条件&#xff1a; minikube 已安装&#xff0c;JetBrains k8s 官方插件已安装&#xff0c;Helm 已安装&#xff0c;kubectl 已安装 打开插件面板 检查可执行文件 添加配置文件 添加集群 验证

Shiro-认证绕过漏洞(CVE-2020-1957)

文章目录 漏洞原理源码分析与复现影响版本 漏洞原理 核心点就是shiro和spring对uri进行配合匹配的时候有缺陷导致的&#xff0c;shiro中很轻易就能绕过&#xff0c;其次spring中对;分号好像情有独钟&#xff0c;被大牛们发现后也就一下子绕过了。 主流payload&#xff1a;/xxx…

【古籍下载】NO.111书格网站,免费搜索下载古籍的数字图书馆,推荐有价值的古籍善本、字画,将文化艺术作品数字化归档。

网站尽量挑选欣赏和在阅读价值较高的善本&#xff0c;更倾向于&#xff1a;艺术类、影像类、珍稀类以及部分刊印水平较高的书籍 下载地址&#xff1a;点击查看

基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;通过ADC0808获取两路电压&#xff0c;通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码&#xff0c;PROTEUS8.15进行仿真&#xff0c;全部资源在页尾&#xff0c;提供…

笔记整理—内核!启动!—linux应用编程、网络编程部分(1)API概述与文件I/O

文件I/O即为文件的input和output的功能。 操作系统的API&#xff1a; 学习操作系统的本质就是学习一个操作系统提供的API。 常用的IO:open、close、write、read、lseek。 打开一个文件&#xff08;open&#xff09;得到一个文件描述符&#xff0c;读写文件使用&#xff08;read…