基于VS2019 C++的跨平台(Linux)开发(1.3.3)——进程管理
接上一篇文章,先来回顾作业,再来学习守护进程
基于VS2019 C++的跨平台(Linux)开发(1.3.2)——进程管理
一、回顾作业
详解见以下链接
c++ 文件拆分与合并——结合linux进程管理wait/waitpid
二、守护进程
守护进程,也就是通常所说的精灵进程,是Linux中的后台服务进程,生存期较长的进程,通常独立于控制终端并且周期性的执行某种任务或者等待处理某些发生的事情。
守护进程是在后台运行不受终端控制的进程;是能自动转到后台并且脱落与终端的联系;linux系统中一般有很多守护进程在后台运行 ,执行不同的管理任务。
守护进程的特性:
- 后台运行
- 必须与运行钱的环境隔离开来
- 启动方式尤其特殊之处
守护进程运行环境:
包括未关闭的文件描述符、控制终端、会话和进程组,工作目录以及文件创建掩膜等
这些环境通常是守护进程从执行它的父进程中继承下来的(特别是shell)
守护进程的启动方法:
1、在系统启动时很多守护进程都是由系统初始化脚本启动,这些脚本一般在etc目录以及etc/rc开头的目录下,他们的位置和内容依赖于具体的实现
2、许多网络服务器由inetd超级服务器启动的,inetd是由系统初始化脚本启动的
3、corn守护进程按规则定期执行一些程序,由它启动的程序也以守护进程的方式运行,corn是由系统初始化脚本启动
4、不管是在前台还是在后台,守护进程也可以在用户终端上启动
守护进程编程步骤:
1、创建子进程,父进程退出;所有工作在子进程中进行;形式上脱离了控制终端
2、在子进程中创建新会话;setsid函数;使用子进程完全独立出来,脱离控制
3、改变当前目录为根目录;chdir函数;防止占用可卸载的文件系统;也可以换成其他路径
4、重设文件权限掩码;umask函数;防止继承的文件创建屏蔽字拒绝某些权限;增加守护进程灵活性
5、关闭文件描述符;继承的打开文件用不到,浪费系统资源,无法卸载;getdtablesize函数;
返回所在进程的文件描述表的项数,即这个进程打开的文件数目
6、开始执行守护进程核心工作
7、 守护进程退出处理
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>void daemon(void)
{pid_t pid;//成为一个新会话的首进程,失去控制终端if ((pid = fork()) < 0) {perror("fork");exit(1);}/* parent */else if (pid != 0) exit(0);setsid();//改变当前工作目录到/根目录下if (chdir("/") < 0) {perror("chdir");exit(1);}/* 设置umask为0 */umask(0);//重定向0,1,2文件描述符到 /dev/null,因为已经失去控制终端,再操作0,1,2没有意义.close(0);open("/dev/null", O_RDWR);dup2(0, 1);dup2(0, 2);
}
int main(void)
{//调用守护进程函数daemon();//在此循环中可以实现守护进程的核心工作while(1);
}
注意:
变成一个守护进程之后不再和当前终端关联。运行带x参数的ps命令可以看到。此外,用户关闭终端窗口或者注销也不影响守护进程的运行。
三、IPC通信
现在linux使用的进程间通信方式:
- 信号(signal)
- 管道(pipe)和命名管道(FIFO)
- 消息队列
- 共享内存
- 信号量
- 套接字(socket)
以上的通信方式会在后续中进行一一学习
基于VS2019 C++的跨平台(Linux)开发(1.3.3)——进程管理相关推荐
- 基于VS2019 C++的跨平台(Linux)开发(2.1)——网络基础
一.引言 首先,来聊聊我们现实中的QQ聊天,如下图所示,两个客户端分别表示聊天的两方,那么可能有人会想为什么中间多了个腾讯公司的服务器呢?因为我们的QQ软件是从腾讯公司下载下来的,它其实起到了中转站的 ...
- 基于VS2019 C++的跨平台(Linux)开发(1.2.2)——设备管理及文件IO
接上一篇文章,我们来回顾作业以及学习其他的一些系统调用等等 Linux--设备管理及文件IO(一) 一.回顾作业 1.知识点 1.文件IO分类 ①纯文本文件:不能进行任何修饰,且只有文字的文件;如.c ...
- 基于VS2019 C++的跨平台(Linux)开发(1.5)——管道
一.管道概述 1.1.管道概念 管道是Unix中最古老的进程间通信的形式.我们把从一个进程连接到另一个进程的一个数据流(文件IO流)称为一个"管道". 1.2.管道特点 管道是半双 ...
- linux基础知识_压缩—进程管理-网络管理-ftp-nfs-ssh-scp
linux基础知识_压缩-进程管理-网络管理-ftp-nfs-ssh-scp 1.压缩包管理 gzip .gz格式的压缩包,不打包,分别压缩,原文件消失 bzip2 .bz2格式的压缩包,原文件不会消 ...
- linux内核设计与实现---进程管理
进程管理 1 进程描述符及任务结构 分配进程描述符 进程描述符的存放 进程状态 设置当前进程状态 进程上下文 进程家族树 2 进程创建 写时拷贝 fork() vfork() 3 线程在Linux中的 ...
- 【Linux】ps和top进程管理命令
ps命令和top都是查看Linux系统进程相关信息,即进程管理工具. 1. ps和top命令区别 1.1 ps命令 可以查看进程的瞬间信息(系统在过去执行的进程的静态快照). 只看到的是命令执行瞬间的 ...
- 11、Linux系统基础原理、进程管理工具、任务计划
Linux进程及作业管理 内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能 Process: 运行中的程序的一个副本: 存在生命周期 Linux内核存储进程信息的固定 ...
- Linux开发(十三):守护进程
目录 一.概述 二.守护进程的创建 1.顺序创建 2.库函数daemon() 三.守护进程出错处理 一.概述 Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任 ...
- 自实现进程管理器linux,【Linux工具篇】supervisor进程管理器
概述 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,除了通过nohup.&.screen以外,更推荐的方法就是用Supervisor. Supervisor是用Python开发的一 ...
最新文章
- Camera框架初探
- 解决MSSQL 2008不能用IP登录的问题
- 转 alsa录音放音执行流程详解
- icd11中文版精神障碍pdf_精神与行为障碍类别目录(ICD-11)
- 同时买票是怎么实现的_去巴黎玩怎么买地铁票最划算?| 巴黎最全交通攻略
- Python 数据分析三剑客之 Matplotlib(八):等高线 / 等值线图的绘制
- 枚举算法称硬币C语言,【算法系列之枚举】称硬币
- Spring Cloud Sleuth 原理简介和使用
- R语言中,保留含有特定字符的元素
- push bullet matlab,PushBullet(推送)下载|PushBullet(推送)安卓版v16.5.4 官方最新版_软件侠下载站...
- C语言编写游戏的程序教程,如何运用C语言编写搬山游戏
- 计算机系统结构试卷及答案
- IE9下的怪异现象求解
- 【电信学】【2011.06】​基于空时空频编码的MIMO-OFDM通信信道估计与性能分析
- linux csr蓝牙驱动下载,佳能 CSR Bluetooth Device 驱动程序下载-更新佳能软件(蓝牙)...
- 电脑上怎么录制视频 电脑实用快捷键
- 今日恐慌与贪婪指数为20 恐慌程度有所上升
- CTB全球创新大挑战组队中 全新课题火热来袭
- 10分钟入门Pandas(添加一些个人见解)
- Excel如何将多列数据按行合并