【C++2】进程 信号 dbus

news2024/12/23 13:11:46

文章目录

  • 1.进程:fork(),ps -ef (同-aux) | more
  • 2.信号:signal(, EXIT),jps
    • 2.1 捕捉信号:ctrl+c:2
    • 2.2 捕捉信号:kill -9:9
    • 2.3 捕捉信号:kill:15
    • 2.4 程序后台运行两种方法:&:ctrl+c无法中止,用killall book1或kill 进程号。if (fork()>0)return 0 父进程退出
  • 3.dbus:IPC,libdbus(进程可以通过libdbus提供的函数来接入到D-Bus,如会提供注册方法、调用方法、发布信号等函数)


1.进程:fork(),ps -ef (同-aux) | more

一个进程(正在内存中运行的程序)在内存里有三部分数据:代码段(相同),堆栈段+数据段(不同)。getpid库函数功能是获取进程编号,该函数没有参数,返回值是进程的编号(相同程序在不同时间执行,进程编号不同)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进程应用:并发:把socket服务端改为多进程,每次accept到一个客户端连接后,生成一个子进程,让子进程负责与这个客户端通讯。父进程继续accept客户端连接。以下在服务端中,在CTcpServer类中增加两个成员函数。
在这里插入图片描述
在这里插入图片描述
僵尸进程:一个进程执行了exit系统调用退出时会向父进程发送SIGCHLD信号,而其父进程并没有为它收尸(调用wait或waitpid来获得它的结束状态,如进程ID、终止状态等等)的进程,ps显示有< default >。总结:仔细处理子进程死后的信息,如果不想处理就需要交给系统处理。
在这里插入图片描述

2.信号:signal(, EXIT),jps

进程间通信方式:1.管道:ls | grep 1。
2.消息队列:内核创建的一个消息队列,os中多个进程都能操作这个消息队列,可以往里面发送消息,可以接收消息。类似socket。
3.共享内存:每个进程访问内存时,有一个虚拟内存地址和物理内存地址的一个映射,一般两个进程的虚拟内存地址可以一样,但映射的物理内存地址一般不一样。共享内存就是将它们映射的物理内存地址也变一样,这时两个进程能同时访问一块相同的物理内存,于是借助这块物理内存实现通信。

4.套接字:常见,访问数据库进程和数据库进程本身,这两个进程间通信就是通过3306号端口建立起的tcp套接字。本机访问mysql不走tcp的套接字,而是走linux底层套接字。
5.信号量/灯:类似一个计数器,控制多个进程对一个共享资源的访问,起到控制数量的锁机制。
6.信号:一个进程可向另一个进程发送一个信号,进程可处理这个信号。如下列出所有信号,linux中信号大多数是把另一个进程杀死,干脆把这个指令叫kill了,如下64种死法。 如下是键盘中断ctrl+c,是当前shell向tail -f这个进程发送一个信号值为2的2)SIGINT的信号。
在这里插入图片描述
在这里插入图片描述

2.1 捕捉信号:ctrl+c:2

如下在死循环之前注册下信号的处理,如下让ctrl+c无效。
在这里插入图片描述
点击Build后就会将类编译出来。
在这里插入图片描述
如上ctrl+c无法停止,只能用kill,jps查看进程pid。
在这里插入图片描述

2.2 捕捉信号:kill -9:9

在这里插入图片描述

2.3 捕捉信号:kill:15

将如上KILL换成TERM即SIGTERM,重新build project。win下信号比linux下信号少很多,将当前程序打包成jar包传到linux。用如下命令行打包。
在这里插入图片描述
在这里插入图片描述
如下用压缩软件打开1.jar。
在这里插入图片描述
如下:后有一个空格,最后一行是空行。
在这里插入图片描述

2.4 程序后台运行两种方法:&:ctrl+c无法中止,用killall book1或kill 进程号。if (fork()>0)return 0 父进程退出

在这里插入图片描述
信号作用:服务程序在后台运行,如果想终止它,杀了它不是个好办法,因为没有释放资源。如果能向程序发一个信号,程序收到这个信号后调用一个函数,在函数中编写释放资源代码,程序就可以安全体面退出。
在这里插入图片描述
下面 EXIT函数就是自定义函数,TcpServer设为全局变量因为EXIT函数要访问它并关闭socket。
在这里插入图片描述

3.dbus:IPC,libdbus(进程可以通过libdbus提供的函数来接入到D-Bus,如会提供注册方法、调用方法、发布信号等函数)

1.列举所有service的对象结构:busctl tree(首先列举的是service名字,然后再遍历列举该service下所有对象的名字)。
2.列举指定service的对象结构:busctl tree service(不含.service,busctl中的NAME或UNIT)。
3.列举总线上所有的连接:busctl list。

NAME    PID   PROCESS          USER     CONNECTION     UNIT                      SESSION DESCRIPTION
:1.10   690   wpa_supplicant   root     :1.10          wpa_supplicant.service

4.获取server的状态信息:busctl status service。
5.获取对象/接口的属性信息:busctl introspect service 对象 [接口] (中括号可写可不写,服对接)。SIGNATURE :签名,参数。

# busctl  introspect  xyz.openbmc_project.Time.Manager(服)   /xyz/openbmc_project/time/bmc(对)    xyz.openbmc_project.Time.EpochTime(接)
NAME                               TYPE        SIGNATURE    RESULT/VALUE    FLAGS
.Elapsed                           property    t            4827706922      emits-change writable

在这里插入图片描述
6.调用接口的方法:busctl call service 对象 接口 方法 参数类型 参数(如下三个参数)

# busctl call  xyz.openbmc_project.Time.Manager(服)    /xyz/openbmc_project/time/bmc(对)      org.freedesktop.DBus.Properties(接)   Set(方法)  ssv   xyz.openbmc_project.Time.EpochTime   Elapsed   167601266

在这里插入图片描述
如下as字符串数组放一个字符串。
在这里插入图片描述
7.获取接口所有属性值:D-Bus的对象都含有一个接口org.freedesktop.DBus.Properties,可以通过其方法GetAll获取某个接口的所有属性值:busctl call service 对象 org.freedesktop.DBus.Properties GetAll s 接口。

# busctl  call   org.freedesktop.login1(服)  /org/freedesktop/login1/user/_1000(对)   org.freedesktop.DBus.Properties(接)   GetAll   s   org.freedesktop.login1.User(接)
# 可列举用户的属性信息,接口名前的s是GetAll的输入参数类型,代表一个string,可以为该命令加上选项--json=pretty,这样可以输出内容为JSON易读格式

8.获取接口某个属性值:D-Bus的对象都含有一个接口org.freedesktop.DBus.Properties,可以通过其方法Gel获取某个接口的某个属性值:busctl call service 对象 org.freedesktop.DBus.Properties Get ss 接口 属性。

# busctl call   org.freedesktop.login1(服)    /org/freedesktop/login1/user/_1000(对)    org.freedesktop.DBus.Properties(接)   Get   ss  org.freedesktop.login1.User(接)   Slice(属)
v s "user-1000.slice"
# Get后面的ss代表是两个string类型的参数

9.获取属性值:busctl get-property service 对象 接口 属性。

# busctl  get-property   xyz.openbmc_project.Time.Manager(服)    /xyz/openbmc_project/time/bmc(对)   xyz.openbmc_project.Time.EpochTime(接)   Elapsed(属)                 
t 5194896326  (t值,b布尔型)

10.设置属性值:busctl set-property service 对象 接口 属性 属性类型 属性值。

# sudo busctl   set-property    org.freedesktop.systemd1(服)    /org/freedesktop/systemd1(对)  org.freedesktop.systemd1.Manager(接)   LogLevel(属)   s(属性类型)   debug(属性值)

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

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

相关文章

欧几里得算法

0x00 前言 改补的内容是一点都不会少。本章来看欧几里得算法 0x01 概述 欧几里得算法又称为辗转相除法&#xff0c;指用于计算两个非负整数a和b的最大公约数。 两个整数的最大公约数是能够同时整除他们的最大的正整数。 基本原理&#xff1a;两个整数的最大公约数等于其中…

【动态规划】子数组系列(上)

子数组问题 文章目录 【动态规划】子数组系列&#xff08;上&#xff09;1. 最大子数组和1.1 题目解析1.2 算法原理1.2.1 状态表示1.2.2 状态转移方程1.2.3 初始化1.2.4 填表顺序1.2.5 返回值 1.3 代码实现 2. 环形子数组的最大和2.1 题目解析2.2 算法原理2.2.1 状态表示2.2.2 …

C++2(表达式和关系运算)

目录 1.表达式基础 1.表达式基础 运算符重载&#xff0c;就是自己定义 - * / 之类的运算符怎么运算 C中的左值和右值 C语言左值在左侧&#xff0c;右值在右侧 在cpp中要复杂的多 能取到地址的表达式是左值 不能取到地址的表达式是右值 常量对象为代表的左值不能作为赋值语句的左…

【Linux】网络相关概念概述以及原理简单分析介绍

文章目录 [toc] Linux 网络概述网络发展独立模式网络互联局域网LAN 和 广域网WAN 认识 "协议"协议的分层网络协议栈OSI七层模型TCP/IP五层(四层)模型TCP/IP网络协议栈 与 操作系统 的关系 **重新以计算机的视角看待 网络协议栈 局域网内部通信原理简单介绍不同局域网…

mybatis web使用02

处理 transfer 请求的 servlet package com.wsd.web;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRe…

GAMES101 笔记 Lecture08 Shading 2(Shading, Pipeline and Texture Mapping)

目录 Specular Term(高光项)Ambient Term(环境光照项)Blinn-Phong Reflection ModelShading Frequencies(着色频率)Shade each triangle(flat shading)在每个三角形上进行着色Shade each vertex (Gouraud shading)(顶点着色)Shade each pixel (Phong shading)Defining Per-Vert…

【C++详解】——哈希

目录 unordered系列关联式容器 unordered_map unordered_map的接口说明 1.unordered_map的构造 2.unordered_map的容量 3.迭代器相关 4.unordered_map的元素访问 5. unordered_map的查询 6.unordered_map的修改操作 unordered_set 性能测试 底层结构——Hash 哈希…

copula简介

二元正态copula最为重要

MySQL - 自连接查询

1. 测试数据 创建 category 表 : CREATE TABLE category(categoryid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主题id,pid INT(10) NOT NULL COMMENT 父id,categoryName VARCHAR(50) NOT NULL COMMENT 主题名字,PRIMARY KEY(categoryid) ) ENGINEINNODB AUTO_INCREM…

cmd的学习

目录 常用的cmd命令 使用cmd的例子 常用的cmd命令 指令作用盘符名称:盘符切换dir查看当前路径下的内容tree以树形结构输出当前路径下的内容cd进入单级目录cd ..回退到上一级目录cd 目录1\目录2\...进入多级目录cd \回退到盘符目录cls清屏exit退出窗口 &#xff08;值得注意的…

Android AlertDialog setView,kotlin

Android AlertDialog setView&#xff0c;kotlin <?xml version"1.0" encoding"utf-8"?> <com.google.android.material.textfield.TextInputLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width…

MySQL数据库——主从复制和读写分离

MySQL数据库——主从复制和读写分离 一、主从复制和读写分离的相关知识1.什么是读写分离&#xff1f;2.为什么要读写分离呢&#xff1f;3.什么时候要读写分离&#xff1f;4.主从复制与读写分离5.mysql支持的复制类型6.主从复制的工作过程7.MySQL 读写分离原理8.目前较为常见的 …

前端实现俄罗斯方块游戏(内含源码)

目录 一、前言 二、功能介绍 三、页面搭建 四、样式设置 五、逻辑部分 一、前言 今天带领大家完成俄罗斯方块游戏&#xff0c;功能也比较简单&#xff0c;也是想借助这样一个简单的功能&#xff0c;然后来帮助大家了解我们JavaScript在前端中的作用&#xff0c; 后续也会带…

【服务器】ASP.Net Core(C#)创建Web站点

简单几步实现本地ASP.Net.Core web 站点结合cpolar内网穿透工具实现远程访问 1. 创建站点 *环境搭建,这边测试,使用.NET 6.0 SDK,可以点击跳转到官网下载,下载后安装即可. 安装完成后,进入到某个文件夹,打开powershell执行下面命令,创建新的 Web 应用,名称叫:aspnetcoreapp …

机器学习 day22(ReLU激活函数)

ReLU激活函数 如果想让a取更大的非负数&#xff0c;激活函数g(z)可以选用ReLU激活函数&#xff0c;他在z&#xff1c;0时取0&#xff0c;在z ≥ 0时取z 常见的激活函数 左侧的为线性激活函数&#xff0c;因为f(x) wxb&#xff0c;使用激活函数后f(x) g(z)&#xff0c;此…

综合评价算法 | Matlab实现基于TOPSIS法的综合评价算法

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 综合评价算法 | Matlab实现基于TOPSIS法的综合评价算法 研究内容 C.L.Hwang 和 K.Yoon 于1981年首次提出 TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution)。TOPSIS 法是一种…

卷积神经网络--猫狗系列【CNN】

数据集&#xff0c;这次这个是分了类的【文末分享】 各12500张&#xff1a; 两点需要注意&#xff1a; ①猫狗分类是彩色图片&#xff0c;所以是3个channel&#xff1b; ②猫狗分类的图片大小不一&#xff0c;但是CNN的输入要求是固定大小&#xff0c;所以要resize。 划分训练…

【动态规划】子数组系列(下)

子数组问题 文章目录 【动态规划】子数组系列&#xff08;下&#xff09;1. 等差数组划分1.1 题目解析1.2 算法原理1.2.1 状态表示1.2.2 状态转移方程1.2.3 初始化1.2.4 填表顺序1.2.5 返回值 1.3 代码实现 2. 最长湍流子数组2.1 题目解析2.2 算法原理2.2.1 状态表示2.2.2 状态…

初学spring5(五)使用注解开发

学习回顾&#xff1a;初学spring5&#xff08;四&#xff09;自动装配 一、使用注解开发 二、说明 在spring4之后&#xff0c;想要使用注解形式&#xff0c;必须得要引入aop的包 在配置文件当中&#xff0c;还得要引入一个context约束 <beans xmlns"http://www.sprin…

Node.js模块化加载机制

优先从缓存中加载 模块在第一次加载后会被缓存。这也意味着多次调用 require() 不会导致模块的代码被执行多次 注意:不论是内置模块、用户自定义模块、还是第三方模块&#xff0c;它们都会优先从缓存中加载&#xff0c;从而提高模块的加载效率 $就像下方图中测试 内置模块…