进程间通信

进程间通信的几种方式

1.进程间通信原理
进程通信,是指进程之间交换信息。从这个意义上讲,进程之间的同步、互斥也是一种信息交换,也是一种通信。但是,这里所说的“通信”是指进程之间交换较多的信息这样一种情况,特别是在由数据相关和有合作关系的进程之间,这种信息交换是十分必要和数量较大的。

进程间通信是协调解决多个进程之间的约束关系,实现进程共同进展的关键技术,是多道系统中控制进程并发执行必不可少的机制。

(1)进程的通信方式:
a.直接通信是指信息直接传递给接收方,如管道。在发送时,指定接收方的地址或标识,也可以指定多个接收方或广播式地址, send(Receiver, message)。在接收时,允许接收来自任意发送方的消息,并在读出消息的同时获取发送方的地址, receive(Sender,message)。

b.间接通信:借助于收发双方进程之外的共享数据结构作为通信中转,如消息队列。这种数据结构称为缓冲区或信箱。通常收方和发方的数目可以是任意的。

(2)进程间通信的类型:
a.管道通信:管道是一条在进程间以字节流方式传送的通信通道。它由OS核心的缓冲区(通常几十KB)来实现,是单向的;在实质上,是一个有OS维护的特殊共享文件,常用于命令行所指定的输入输出重定向和管道命令。在使用管道前要建立相应的管道,然后才可使用。

b.消息队列机制:在消息传递系统中,进程间的数据交换以消息为单位,用户直接利用系统提供的一组通信命令(原语)来实现通信。

c.共享存储器系统:基于共享数据结构的通信方式:只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量机制。速度快,但传送信息量小,编程复杂,属于低级通信;基于共享存储区的通信方式:能够传送任意数量的数据,属于高级通信。

(3)管道通信机制
a.匿名管道一般用于具有亲缘关系的两个进程间通信。其中,一个进程发出某种数据信息,另外一方接受数据信息,这些数据信息通过一个共享的存储空间进行传递。

b.命名管道以先进先出形式的文件存在于文件系统中。因此,只要可以访问该文件路径,就能够彼此通过命名管道相互通信。

(4)消息队列机制
消息队列通信机制,首先由美国Hansan提出。在这种通信机制中,发送进程利用send原语将消息直接发送给接收进程,接收进程则利用receive原语接收消息。其中,消息是一个格式化的可变长信息单位。消息机制允许一个进程向任何其他进程发送一个消息。具有写入权限的进程可以往消息队列中写入一个消息,具有读出权限的进程则可以从消息队列中读出一个消息。消息的发送不需要接收方准备好,随时可发送。

(5)共享内区机制
共享内存是一种简单而高效的进程间通信方法。共享内存就是两个进程共同拥有同一片内存,这部分内存中的任何内容,二者均可以访问。要使用共享内存进行通信,一个进程首先创建一片内存空间专门作为通信用,其他进程可以将该片内存映射到自己的虚拟地址空间。这样,读写自己地址空间中对应共享内存的区域时,就是在和其他进程进行通信。

2.实现进程间的匿名管道通信。
其中,一个进程(源)通过管道向另一个进程(目的地)发送一个信息,目的进程接收该信息。

3.使用消息队列来实现进程和进程之间的通信。
接收进程首先创建一个消息队列,随后发送进程可以打开消息队列,从而实现消息的发送和接收。实现时,发送进程在利用发送原语发送消息之前,先在自己的内存空间设置一发送区,把待发送的消息正文等信息填入其中,然后调用发送原语,把消息发送给接收进程。发送原语建立一缓冲区,把发送区中的消息复制到缓冲区,并将该缓冲区挂在接收进程的消息队列上。接收进程调用接收原语,从消息队列中摘下第一个消息,将其复制到消息接收区中。

4.使用共享存储区来实现两个进程之间的通信。
进程通信前,发送进程先向系统申请获得共享存储区中的一个分区(共享区),并指定该分区的关键字。然后,由申请者把获得的共享区连接到本进程上。此后,便可像读写普通存储器一样进行读、写该共享区。接收进程同样可像发送进程一样将共享区连接到自己的进程上,进行读、写操作。

sql inject leak

sql盲注

sql注入是什么

  • sql注入是一种常见的黑客攻击手段,通过执行一些sql,获取数据库数据和权限

危险等级

  • 危害等级:高

注入案例

  • 通常在参数后面接
    • param1=xx’and(selectfrom(select+sleep(10))a/*/union/**/select+1)=’
    • param1=xx%27and%28select%2Afrom%28select%2Bsleep%283%29%29a%2F%2A%2A%2Funion%2F%2A%2A%2Fselect%2B1%29%3D%27

产生原因

  • 参数没有严格校验
  • 数据库orm没有遵循预处理

修复方法

  • 用户输入参数做校验
  • 数据库orm使用预编译,且业务遵循orm封装

node express

是什么

  • web开发框架

用来干什么

  • 写api接口
  • 写web网站

安装

  • npm install express –save

路由

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var app = express()

app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})

app.post('/', function (req, res) {
res.send('Got a POST request')
})

app.put('/user', function (req, res) {
res.send('Got a PUT request at /user')
})

app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user')
})

中间件

1
2
3
4
5
6
7

var app = express()

app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})

hexo github pages

这东西能干啥?

  • 搭建一个属于自己的blog
  • 存放API文档

为什么要用这个?

  • markdown语法让你专注于写自己的东西
  • 丰富的插件和主题
  • 自动化部署
  • github pages可以存放静态文件,通过域名访问,这样不需要单独去买云主机,当然最好是自己买个,怎么玩都行

怎么用?

环境

  • mac
    • MacBook Pro (Retina, 15-inch, Mid 2014)
    • 2.2 GHz Intel Core i7
    • 16 GB 1600 MHz DDR3
  • node -v
    • v12.3.1
  • npm -v
    • 6.9.0

安装node

安装git

安装 node hex-cli模块

  • npm install -g hexo-cli

创建github 空项目

  • 用自己用户名 例如:jason-gao.github.io,搭建好后可以通过这个域名直接访问,github pages自带的功能

clone

init

  • 新建source分支存放hexo写作的源码,后面将public里的静态文件部署到master分支,通过jason-gao.github.io访问
    • git checkout -b source
  • hexo init

启动服务

生成静态文件

  • hexo g

部署到github pages

  • 装hexo插件

    • npm install hexo-deployer-git –save
  • 修改配置文件

    1
    2
    3
    4
    deploy:
    type: git
    repo: git@github.com:jason-gao/jason-gao.github.io.git
    branch: master
  • 部署

    • hexo d 此命令是将生成在public下的静态文件,推送到上面配置的仓库的对应分支

访问

自定义域名

  • source文件夹下放置名为CNAME的文件,文件内容为gaolu.tech
  • hexo g
  • hexo d
  • 域名解析商添加解析: blog CNAME jason-gao.github.io.
  • http://gaolu.tech即可访问