IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 七、进程控制 八、守护进程 -> 正文阅读

[开发工具]七、进程控制 八、守护进程

七、进程控制

$ ps axj  //打印进程状态
$ ps axj | grep xxxx  //之查看跟xxxx有关的进程
$ tail -f xxx  //动态查看

7.1 进程组

每个进程除了有一进程ID之外,还属于一个进程组,进程组是一个或多个进程的集合,进程组ID是一个正整数,并可以存放在pid_t数据类型中,getpgrp可以返回调用进程的进程组ID。

进程组:

作用:对相同类型的进程进行管理

进程组的诞生:

  • 在shell里面直接执行一个应用程序,对于大部分进程来说,自己就是进程组的首进程。进程组只有一个进程
  • 如果进程调用了fork函数,那么父子进程同属一个进程组,父进程为首进程
  • 在shell中通过管道执行连接起来的应用程序,两个程序同属一个进程组,第一个程序为进程组的首进程

进程组id:pgid,由首进程pid决定

前台进程组:

shell进程启动时,默认是前台进程组的首进程。

前台进程组的首进程会占用会话所关联的终端来运行,shell启动其他应用程序时,其他程序成为首进程

后台进程组:

后台进程中的程序是不会占用终端

在shell进程里启动程序时,加上&符号可以指定程序运行在后台进程组里面

ctrl+z

jobs:查看有哪些后台进程组

fg+job id可以把后台进程组切换为前台进程组

7.2 会话

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OqT8TEl4-1630839457660)(E:\笔记 + 资料\03.APUE\page\image-20210905101724768.png)]

作用:管理进程组

会话的诞生:

  • 调用setsid函数,新建一个会话,应用程序作为会话的第一个进程,称为会话首进程
  • 用户在终端正确登录之后,启动shell时linux系统会创建一个新的会话,shell进程作为会话首进程

会话id:会话首进程id,SID

setsid():

函数功能:创建一个新的会话,在子进程调用,创建守护进程。

#include <sys/types.h>
#include <unistd.h>

pid_t setsid(void);
//返回值:成功 --> 返回进程组ID  失败 --> -1,设置errno
如果调用此函数的进程不是一个进程组的组长,则此函数创建一个新会话。具体会发生以下3件事。
该进程变成新会话的会话首进程( session leader,会话首进程是创建该会话的进程)。此时,该进程是新会话中的唯一进程。
该进程成为一个新进程组的组长进程。新进程组ID是该调用进程的进程ID.
该进程没有控制终端。如果在调用setsid之前该进程有一个控制终端,那么这种联系也被切断。
如果该调用进程已经是一个进程组的组长,则此函数返回出错。

7.3 终端

  • 物理终端

    • 串口终端
    • lcd终端
  • 伪终端

    • ssh远程连接产生的终端
    • 桌面系统启动的终端
  • 虚拟终端

    linux内核自带的,ctrl+alt+f0~f6可以打开7个虚拟终端

7.6

创建一个新的会话,

pid = gid

解释器就是一个二进制的可执行文件

八、守护进程

$ cd /var/log  //查看日志文件
$ tail if -xxx  //动态查看一个文件的内容变化
13.3 理论 四个黑点
13.6 

会话用来管理前后台进程组

会话一般关联着一个终端 当终端被关闭了之后,会话中的所有进程都会被关掉

守护进程特点:pid = pgid = sid

不受终端影响,就算终端退出,也可以继续在后台运行

守护进程的父进程是1号或者指定的某个进程

8.1 写一个守护进程

1.创建一 个子进程,父进程直接退出

方法:通过fork)函数

2.关闭不需要的文件描述符 0, 1, 2:标准输入、输出、出错

方法:通过dup2()函数

3.创建一个新的会话, 摆脱终端的影响

方法:通过setsid()函数

4.重设文件权限掩码新建文件的权限受文件权限掩码影响

umask:022,000010010,只写

新建文件默认执行权限: 666, 110110110

真正的文件执行权限:666&~umask

方法:通过umask)函数

5.改变守护进程的当前工作目录,改为"/"

方法:通过chdir)函数

创建守护进程代码实现:

void daemonize()
{
	pid_t pid;
	int fd;

	pid = fork();
	if(pid < 0)
	{
		syslog(LOG_ERR,"fork():%s",strerror(errno));
		exit(0);
	}
	if(pid > 0)
		exit(0);

	// child
/*
	close(0);
	close(1);
	close(2);
*/
	fd = open("/dev/null",O_RDWR);
	if(fd < 0)
	{
		syslog(LOG_WARNING,"open():%s",strerror(errno));
	}
	else
	{
		dup2(fd,0);	
		dup2(fd,1);	
		dup2(fd,2);
		if(fd > 2)
			close(fd);
	}
	setsid();

	umask(0);  //只在当前程序中生效,
	chdir("/");   //chdir 是一个系统调用,改变工作路径(假根)
}

日志的权限都比较高,为了避免秀改。

8.2 写一个日志文件

$ cd /var/log   
$ vim /var/log/syslog  //ubunt主日志文件

在这里插入图片描述

openlog() && closelog()

函数功能:此函数用来打开一个到系统日志记录程序的连接,

我们可以指定一个名称,以后, 这个名称将被加至每则记录消息中

void openlog(const char *ident, int option, int facility);
void closelog(void);  //关闭此连接

参数:

  • ident:是一个标记,ident所表示的字符换将固定加在每行日志前面以标识这个日志,通常为程序的名称
  • option:位图 LOG_PID(每一个信息都带着一个PID),man手册查看
  • facility:再次更详细的说明一下你是谁
option描述
LOG_PID每一个消息都加上用户的pid
LOG_CONS如果发送系统日志出现错误,将直接写入到系统控制台
LOG_PERROR还要将消息记录到stderr.
facility描述
LOG_DAEMON设置守护进程没有单独的设备值
LOG_CRON时钟守护进程

syslog()

函数功能:把日志消息发给系统程序syslog去记录

提交我也写的东西给要写日志的人(把要写的内容发送过去)。

void syslog(int priority, const char *format, ...);
//提交给 syslogd 写系统日志,这个服务统一写日志。
//syslogd里配置文件

参数:

  • priorit:优先级别
  • format:输出项 (注意:不能加 ‘\n’ )
priority描述
LOG_ERR错误信息
LOG_DEBUG级的调试信息
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:21:26  更:2021-09-06 11:22:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 0:10:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计