-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
359 lines (282 loc) · 32.7 KB
/
index.html
File metadata and controls
359 lines (282 loc) · 32.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
<!DOCTYPE html><html lang="en" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>huzixiaoshu - welcome</title><meta name="author" content="huzixiaoshu"><meta name="copyright" content="huzixiaoshu"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="hello world">
<meta property="og:type" content="website">
<meta property="og:title" content="huzixiaoshu">
<meta property="og:url" content="https://huzixiaoshu.github.io/index.html">
<meta property="og:site_name" content="huzixiaoshu">
<meta property="og:description" content="hello world">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://huzixiaoshu.github.io/img/655.jpg">
<meta property="article:author" content="huzixiaoshu">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://huzixiaoshu.github.io/img/655.jpg"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="https://huzixiaoshu.github.io/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: undefined,
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: 'Copy successfully',
error: 'Copy error',
noSupport: 'The browser does not support'
},
relativeDate: {
homepage: false,
post: false
},
runtime: 'days',
date_suffix: {
just: 'Just',
min: 'minutes ago',
hour: 'hours ago',
day: 'days ago',
month: 'months ago'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
source: {
jQuery: 'https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js',
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/js/jquery.justifiedGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/css/justifiedGallery.min.css'
},
fancybox: {
js: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js',
css: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.css'
}
},
isPhotoFigcaption: false,
islazyload: false,
isanchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2021-05-05 01:25:14'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
})(window)</script><meta name="generator" content="Hexo 5.4.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="author-avatar"><img class="avatar-img" src="/img/655.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data"><div class="data-item is-center"><div class="data-item-link"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">23</div></a></div></div></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i><span> List</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></li><li><a class="site-page child" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/img/655.jpg')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">huzixiaoshu</a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i><span> List</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></li><li><a class="site-page child" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">huzixiaoshu</h1><div id="site_social_icons"><a class="social-icon" href="https://github.com/huzixiaoshu" target="_blank" title="Github"><i class="fab fa-github"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/05/05/TCP%E5%AD%A6%E4%B9%A0/" title="TCP学习"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="TCP学习"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/05/05/TCP%E5%AD%A6%E4%B9%A0/" title="TCP学习">TCP学习</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-05-04T17:23:57.186Z" title="Created 2021-05-05 01:23:57">2021-05-05</time></span></div><div class="content">TCP学习
协议上限分析:
以太网:1500
IP:65536
数据包上限是为了防止数据丢了重发速度快
TCP: 不是不会丢包,是丢了可以重传
netstat -apn | grep 6666
端口复用12int opt=1;setSockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2021/05/05/%E5%A4%9A%E8%B7%AFIO%E8%BD%AC%E6%8E%A5/" title="多路IO转接"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="多路IO转接"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/05/05/%E5%A4%9A%E8%B7%AFIO%E8%BD%AC%E6%8E%A5/" title="多路IO转接">多路IO转接</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-05-04T17:23:43.538Z" title="Created 2021-05-05 01:23:43">2021-05-05</time></span></div><div class="content">多路I/O转接服务器
多路I/O转接服务器也叫做多任务I/O服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。select
文件描述上限–1024: 同时监听的文件描述符1024个
for循环才能判断具体是哪一个,效率低
监听集合和满足的集合是一个,所有需要保存一下。poll
1024 突破
监听、返回集合 分离
搜索范围小epoll
是否在线
心跳包
乒乓包
探测分节
</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/05/05/shell/" title="shell"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="shell"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/05/05/shell/" title="shell">shell</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-05-04T17:23:23.579Z" title="Created 2021-05-05 01:23:23">2021-05-05</time></span></div><div class="content">shell编程
#! 指定解释器 例如:#!/bin/bash
# 注释
运行:
chmod a+x sample.sh + ./sample.sh
/bin/bash sample.sh
/bin/sh sample.sh
. sample.sh
source sample.sh内建命令和小括号
man bash-builtins 查看man手册
( shell 命令 ) 不会改变工作目录
; 多个命令可用相隔使用变量按照惯例,shell变量通常由字母加下划线,由任意长度的字母、数字、下划线组成。有两种类型的shell变量
环境变量环境变量可用父进程传给子进程,因此shell 进程的环境变量可用从当前进程传给fork出来的子进程,用printenv命令可以显示当前shell进程的环境变量
本地变量只存在于当前shell进程,用set命令可以显示当前shell进程中定义的所有变量(包括本地变量和环境变量)和函数
可以用export导出,使其为环境变量
用unset命令可以删除已定义的环境变量或本地变量
alias取别名文件名代换(Globbing)这些用于匹配的字 ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2021/04/23/%E6%97%B6%E9%97%B4_%E5%8E%9F%E5%AD%90%E6%93%8D%E4%BD%9C_%E5%BC%82%E5%B8%B8/" title="时间_原子操作_异常"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="时间_原子操作_异常"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/04/23/%E6%97%B6%E9%97%B4_%E5%8E%9F%E5%AD%90%E6%93%8D%E4%BD%9C_%E5%BC%82%E5%B8%B8/" title="时间_原子操作_异常">时间_原子操作_异常</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-04-22T17:14:01.302Z" title="Created 2021-04-23 01:14:01">2021-04-23</time></span></div><div class="content">基础
值语义: 可以拷贝的,拷贝之后,与原对象脱离关系
对象语义,要么是不能拷贝的,要么可以拷贝,拷贝之后与原对象仍然存在一定的关系,比如共享底层资源(要实现自己的拷贝构造函数)
继承了两个类,copyable,or nocopyable。nocopyable只需要让其拷贝构造函数和赋值构造函数定义为=delete即可(c++11特性)或者将其定义为private。其默认构造函数和析构函数需要定义为protectd,使得只能为子类使用,但是子类不具有复制行为。123456789class noncopyable {public: noncopyable(const noncopyable&) = delete; void operator=(const noncopyable&) = delete;protected: noncopyable() = default; ~noncopyable() = default;};
muduo::copyable 空基类,标识类,值类型Timestamp
static_assert 在 ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/04/23/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/" title="网络基础"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="网络基础"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/04/23/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/" title="网络基础">网络基础</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-04-22T17:13:03.412Z" title="Created 2021-04-23 01:13:03">2021-04-23</time></span></div><div class="content">网络基础协议典型协议
传输层:TCP/UDP 协议
应用层: HTTP协议、FTP协议
网络层: IP协议、ICMP协议、IGMP协议
网络接口层:ARP协议、RARP协议
TCP传输控制协议是一种面向连接、可靠的、基于字节流的传输层通信协议
UDP用户数据报协议是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
HTTP超文本传输协议是互联网上应用最为广泛的一种网络协议
FTP文本传输协议
IP协议是因特网互联协议
ICMP协议是Internet控制报文协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制信息
IGMP协议是Internet组管理协议是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
ARP协议是正向地址解析协议,通过已知的IP,寻找对应的主机MAC地址
RARP是反向地址转换协议,通过MAC地址确定IP地址网络设计模式
C/S (客户端、服务器)
优点:
协议选用灵活
缓存数据
缺点:
对用户的安全构成威胁
开发工作量较大,调试困难
B/S (浏览器、服务器)
优点 ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2021/04/20/%E7%BA%BF%E7%A8%8B%E7%9A%84%E5%90%8C%E6%AD%A5/" title="线程的同步"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="线程的同步"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/04/20/%E7%BA%BF%E7%A8%8B%E7%9A%84%E5%90%8C%E6%AD%A5/" title="线程的同步">线程的同步</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-04-20T13:51:27.440Z" title="Created 2021-04-20 21:51:27">2021-04-20</time></span></div><div class="content">同步概念
同步即协同步调,按预定的先后次序运行。
线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回,同时其它线程为保证数据一致性,不能调用该功能。
锁是建议锁,不具备强制性。
多个控制流,共同操作一个共享资源的时候需要同步。
数据混乱的原因
资源共享(独享资源则不会)
调度随机(意味着数据访问会出现竞争)
线程间缺乏必要的同步机制
前两点不能改变,欲提高效率,传递数据,资源必须共享,只要共享资源,就一定会出现竞争。只要存在竞争关系,数据就很容易出现混乱。所以只能从第三个着手解决,使多个线程在访问共享资源的时候,出现互斥。互斥量mutexpthread_mutex_init 函数
初始化一个互斥锁(互斥量)–> 初值可以看作1
restrict关键字: 只用于限制指针,告诉编译器,所有修改该指针指向内存中内容的操作,只能通过本指针完成。不能通过除本指针以外的其它变量或指针修改。
互斥量属性。是一个传入参数,通常传NULL,选用默认属性(线程间共享)
静态初始化:如果互斥锁mutex是静态分配的(定义在全局,或加了static关键字修饰),可以 ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/04/19/%E7%BA%BF%E7%A8%8B/" title="线程"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="线程"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/04/19/%E7%BA%BF%E7%A8%8B/" title="线程">线程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-04-19T13:43:26.744Z" title="Created 2021-04-19 21:43:26">2021-04-19</time></span></div><div class="content">线程概念
LWP:light weight process 轻量级进程,本质是仍是进程
进程: 独立地址空间,拥有PCB
线程: 也有PCB,但没有独立的地址空间(共享)
区别: 在于是否共享地址空间。 独居(进程);合居(线程)。
Linux下:
线程:最小的执行单位
进程:最小分配资源单位,可以看成只有一个线程的进程。
linux下内核线程实现原理
轻量级进程,也有PCB,创建线程使用的底层函数和进程一样,都是clone
从内核里看进程和线程一样,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的
进程可以蜕变成线程
线程可以看作寄存器和栈的集合
在linux下,线程最小的执行单位,进程是最小的资源分配单位
查看LWP号: ps -Lf pid 查看指定线程的lwp号线程共享资源
文件描述符
每种信号的处理方式
当前工作目录
用户ID和组ID
内存地址空间(.text/.data/.bss/heap/共享库)线程非共享资源
线程id
处理器现场和栈指针(内核栈)
独立的栈空间(用户空间栈)
errno变量
信号屏蔽字
调度优先级线程优 ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2021/04/18/%E4%BF%A1%E5%8F%B72/" title="信号2"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="信号2"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/04/18/%E4%BF%A1%E5%8F%B72/" title="信号2">信号2</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-04-18T04:08:48.751Z" title="Created 2021-04-18 12:08:48">2021-04-18</time></span></div><div class="content">竞态条件(时序竞争)pause函数
调用该函数可以造成进程主动挂起,等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃cpu)直到有信号递达将其唤醒
int pause (void) 返回值:-1 并设置errno为EINTR
如果信号的默认处理动作是终止进程,则进程终止,pause函数没有机会返回。
如果信号的默认处理动作是忽略,进程继续处于挂起状态,pause函数不返回。
如果信号的处理动作是捕捉,则调用完信号处理函数之后,pause函数返回-1, errno设置为EINTR,表示“被信号中断”,
pause收到的信号不能被屏蔽,如果被屏蔽,那么pause就不能被唤醒。解决时序问题
sigsuspend : 原子操作,不可再分的操作总结  竞态条件,跟系统负载有很紧密的关系,体现出信号的不可靠性。系统负载越严重,信号不可靠性越强。提早预见,主动规避。全局变量的异步尽量避免使用全局变量。类似于多线程中的多个线程对同一个变量进行操作,很容易造成异常。
不可/可重入函数
一个函数在调用执行期间(尚未调用结束),由于某种时序又被重复调用,称之为“ ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/04/18/%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/" title="守护进程"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="守护进程"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/04/18/%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B/" title="守护进程">守护进程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-04-18T04:08:41.259Z" title="Created 2021-04-18 12:08:41">2021-04-18</time></span></div><div class="content">终端
输入输出的总称叫做终端。
terminal 是虚拟终端
简单来说,一个Linux系统启动,大致流程:
init --> fork --> exec --> getty --> 用户输入账号 --> login --> 输入密码 --> exec -- >bash
线路规程 :line disciline 用来过滤键盘输入的内容
ttyname 函数: 由文件描述符查出对应的文件名进程组概念和特性
进程组,也称为作业。
当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID==第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID==其进程ID。
组长进程可以创建一个进程组,创建该进程组中的进程,然后终止,只要进程中有一个进程存在,进程组就存在,与组长进程是否终止无关。
进程组生存期:进程组创建到最后一个进程离开(终止或转移到另外一个进程组)。
一个进程可以为自己或子进程设置进程组IDgetpgrp函数
获取当前进程的进程组IDgetpgid函数
获取指定进程的进程组IDsetpgid函数
改变进程默 ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2021/04/16/%E4%BF%A1%E5%8F%B7/" title="信号"> <img class="post_bg" src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="信号"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/04/16/%E4%BF%A1%E5%8F%B7/" title="信号">信号</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2021-04-16T11:06:59.941Z" title="Created 2021-04-16 19:06:59">2021-04-16</time></span></div><div class="content">信号的概念
三个特征:
简单
不能携带大量信息
满足某个特定条件才发送
信号的特质: 由于信号是通过软件方法实现,其实现手段导致信号有很强的延时性,但是该时间是相对于CPU而言。与信号相关的时间和状态
产生信号
按键产生 如:
ctrl+c : 2)SIGINT(终止/中断) ‘INT’–interrupt
ctrl+z : 20)SIGSTP(暂停/停止) ‘T’ –Terminal终端
ctrl+\ : 3)SIGQUIT(退出)
系统调用产生,如:kill\raise\abort
软件条件产生,如:定时器 alarm
硬件异常产生,如:
非法访问内存(段错误) 11)SIGSEGV(段错误)
除(0)(浮点数例外) 8)SIGFPE(浮点数例外) ‘F’-float
内存对齐出错(总线错误) 7) SIGBUS
命令产生,如:kill命令
递达: 递送应且到达进程
未决:产生和递达之间的状态,主要由于阻塞(屏蔽)导致该状态
信号的处理方式:
执行默认动作
忽略(丢弃)
捕捉(调用户处理函数)信号4要素
信号四要素:
编号
名称
事件
默 ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><a class="page-number" href="/page/3/#content-inner">3</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="card-info-avatar is-center"><img class="avatar-img" src="/img/655.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/><div class="author-info__name">huzixiaoshu</div><div class="author-info__description">hello world</div></div><div class="card-info-data"><div class="card-info-data-item is-center"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">23</div></a></div></div><a class="button--animated" id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/huzixiaoshu"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/huzixiaoshu" target="_blank" title="Github"><i class="fab fa-github"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn card-announcement-animation"></i><span>Announcement</span></div><div class="announcement_content">This is my Blog</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>Recent Post</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/2021/05/05/TCP%E5%AD%A6%E4%B9%A0/" title="TCP学习"><img src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="TCP学习"/></a><div class="content"><a class="title" href="/2021/05/05/TCP%E5%AD%A6%E4%B9%A0/" title="TCP学习">TCP学习</a><time datetime="2021-05-04T17:23:57.186Z" title="Created 2021-05-05 01:23:57">2021-05-05</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2021/05/05/%E5%A4%9A%E8%B7%AFIO%E8%BD%AC%E6%8E%A5/" title="多路IO转接"><img src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="多路IO转接"/></a><div class="content"><a class="title" href="/2021/05/05/%E5%A4%9A%E8%B7%AFIO%E8%BD%AC%E6%8E%A5/" title="多路IO转接">多路IO转接</a><time datetime="2021-05-04T17:23:43.538Z" title="Created 2021-05-05 01:23:43">2021-05-05</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2021/05/05/shell/" title="shell"><img src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="shell"/></a><div class="content"><a class="title" href="/2021/05/05/shell/" title="shell">shell</a><time datetime="2021-05-04T17:23:23.579Z" title="Created 2021-05-05 01:23:23">2021-05-05</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2021/04/23/%E6%97%B6%E9%97%B4_%E5%8E%9F%E5%AD%90%E6%93%8D%E4%BD%9C_%E5%BC%82%E5%B8%B8/" title="时间_原子操作_异常"><img src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="时间_原子操作_异常"/></a><div class="content"><a class="title" href="/2021/04/23/%E6%97%B6%E9%97%B4_%E5%8E%9F%E5%AD%90%E6%93%8D%E4%BD%9C_%E5%BC%82%E5%B8%B8/" title="时间_原子操作_异常">时间_原子操作_异常</a><time datetime="2021-04-22T17:14:01.302Z" title="Created 2021-04-23 01:14:01">2021-04-23</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2021/04/23/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/" title="网络基础"><img src="/linear-gradient(20deg,%20#0062be,%20#925696,%20#cc426e,%20#fb0347)" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="网络基础"/></a><div class="content"><a class="title" href="/2021/04/23/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/" title="网络基础">网络基础</a><time datetime="2021-04-22T17:13:03.412Z" title="Created 2021-04-23 01:13:03">2021-04-23</time></div></div></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>Archives</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/05/"><span class="card-archive-list-date">May 2021</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/04/"><span class="card-archive-list-date">April 2021</span><span class="card-archive-list-count">11</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/03/"><span class="card-archive-list-date">March 2021</span><span class="card-archive-list-count">9</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>Info</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">Article :</div><div class="item-count">23</div></div><div class="webinfo-item"><div class="item-name">Run time :</div><div class="item-count" id="runtimeshow" data-publishDate="2021-03-19T16:00:00.000Z"></div></div><div class="webinfo-item"><div class="item-name">UV :</div><div class="item-count" id="busuanzi_value_site_uv"></div></div><div class="webinfo-item"><div class="item-name">PV :</div><div class="item-count" id="busuanzi_value_site_pv"></div></div><div class="webinfo-item"><div class="item-name">Last Push :</div><div class="item-count" id="last-push-date" data-lastPushDate="2021-05-04T17:25:14.860Z"></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2020 - 2021 By huzixiaoshu</div><div class="framework-info"><span>Framework </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>Theme </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="Switch Between Light And Dark Mode"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="Toggle between single-column and double-column"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="Setting"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="Back To Top"><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>