shell 命名管道,进程间通信, ncat作http server
命名管道也被称为FIFO文件, 在文件系统中是可见的,并且跟其它文件一样可以读写!
命名管道特点:
- 当写进程向管道中写数据的时候,如果没有进程读取这些数据,写进程会堵塞
- 当读取管道中的数据的时候,如果没有数据,读取进程会被堵塞
- 当写进程堵塞的时候,有读进程读取数据,那么写进程恢复正常
当读进程堵塞的时候,如果写进程写了数据,那么读进程会读取数据,然后正常执行后面的代码
# 写进程堵塞的情况
[root@ns_10.2.1.242 test]$ echo 1 >p &
[1] 17091
[root@ns_10.2.1.242 test]$ jobs
[1]+ Running echo 1 > p &
[root@ns_10.2.1.242 test]$ cat p
1
[1]+ Done echo 1 > p
[root@ns_10.2.1.242 test]$ jobs
[root@ns_10.2.1.242 test]$ # 读进程堵塞的情况
[root@ns_10.2.1.242 test]$ cat p &
[1] 17351
[root@ns_10.2.1.242 test]$ jobs
[1]+ Running cat p &
[root@ns_10.2.1.242 test]$ echo 2 > p
2
[root@ns_10.2.1.242 test]$ jobs
[1]+ Done cat p
命名管道的作用,不同的进程之间通信,比如在后台执行一个备份进程,然后执行另外一个进程,等待备份完成才会处理想对应的事情!
创建管道的命令:
$ mkfifo /tmp/testpipe
$ mknod /tmp/testpipe p
下面是命名管道的一个应用例子:
reader.sh读取管道的内容,代码如下:
#!/bin/bash
# filename: reader.sh
# 逐行读取管道中的内容
pipe=/tmp/testpipe
trap "rm -f $pipe" EXIT
if [[ ! -p $pipe ]]; then
mkfifo $pipe
fi
while true
do
if read line <$pipe; then
if [[ "$line" == 'quit' ]]; then
break
else
echo $line
fi
fi
done
echo "Stop reader...."
writer.sh写数据到管道,代码如下:
#!/bin/bash
# writer.sh
# 把当前进程的pid写到管道
pipe=/tmp/testpipe
if [[ ! -p $pipe ]]; then
echo "Reader not running"
exit 1
fi
if [[ "$1" ]]; then
echo "$1" >$pipe
else
echo "Hello from $$" >$pipe
fi
reader和writer调用的例子:
[root@ns_10.2.1.242 test]$ sh reader.sh &
[1] 17053
[root@ns_10.2.1.242 test]$ sh writer.sh test
test
[root@ns_10.2.1.242 test]$ sh writer.sh
Hello from 17057
[root@ns_10.2.1.242 test]$ sh writer.sh quit
stop Reader
[root@ns_10.2.1.242 test]$ sh writer.sh quit
Reader not running
[1]+ Done sh reader.sh
[root@ns_10.2.1.242 test]$ sh writer.sh quit
shell 中的$$
是当前进程的进程ID
Ncat作HTTP server:
shell 命名管道,进程间通信, ncat作http server的更多相关文章
- shell 命名管道,进程间通信
命名管道基础 命名管道也被称为FIFO文件, 在文件系统中是可见的,并且跟其它文件一样可以读写! 命名管道特点: 当写进程向管道中写数据的时候,如果没有进程读取这些数据,写进程会堵塞 当读取管道中的数 ...
- SQL Server 连接问题-命名管道
原文:SQL Server 连接问题-命名管道 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/12/sql-server-1.aspx 一.前言 ...
- SQL Server 连接问题圣经-命名管道
SQL Server 连接问题圣经-命名管道 (1) APGC DSD Team 12 Jan 2011 1:24 AM 3 一.前言 在使用SQL Server 的过程中,用户遇到的最多的莫过于连接 ...
- [杂]SQL Server 之命名管道连接
命名管道是通过进程间通信(IPC)机制实现通信.具体来说,命名管道建立在服务器的IPC$共享基础上,通过IPC$共享来进行通信. SQL Server命名管道 SQL Server 首先在服务器上创建 ...
- shell 匿名管道和命名管道
管道的特点:如果管道中没有数据,那么取管道数据的操作就会滞留,直到管道内进入数据,然后读出后才会终止这一操作:同理,写入管道的操作如果没有读取管道的操作,这一动作也会滞留. 1,匿名管道 匿名管道使用 ...
- Linux环境进程间通信(一):管道及命名管道
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
- 【windows 操作系统】进程间通信(IPC)简述|无名管道和命名管道 消息队列、信号量、共享存储、Socket、Streams等
一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进 ...
- Linux进程间通信(四):命名管道 mkfifo()、open()、read()、close()
在前一篇文章—— Linux进程间通信 -- 使用匿名管道 中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都由一个共同的祖先进程启动,这给我们在不相关 ...
- Linux进程间通信-命名管道
前面我们讲了进程间通信的一种方式,匿名管道.我们知道,匿名管道只能用于父子关系的进程之间.那么没有这种关系的进程之间该如何进行数据传递呢? 1.什么是命名管道 匿名管道是在缓存中开辟的输出和输入文件流 ...
随机推荐
- IT兄弟连 HTML5教程 CSS3揭秘 CSS3属性1
通过CSS选择器找到元素,就要使用CSS属性给找到的元素设置样式.尽管现在的浏览器已经支持了众多的CSS3属性,但作为初学者,最应该关注的就是一些“主流”的属性,如border-radius.box- ...
- Ubuntu下预览raw格式图片
默认Ubuntu下资源管理器是不可以直接预览raw格式图片的,这就给查看图片带来很大的不便,下面我们就选择安装UFRaw来预览Raw格式图片 1. 首先在terminal安装UFRaw sudo ap ...
- PAT 1012 The Best Rank 排序
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- C#时间戳与时间相互转换
代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- .NETCore C# 中级篇2-6 Json与XML
.NETCoreCSharp 中级篇2-6 本节内容为Json和XML操作 简介 Json和XML文本是计算机网络通信中常见的文本格式,其中Json其实就是JavaScript中的数组与对象,体现了一 ...
- PHP bcpow BC数学函数
定义和用法 bcpow - 任意精度数字的乘方 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 语法 bcpow( string $left_operand , string $right_ ...
- iOS开发中,获取图片之后保存或下载到本地相册中
#pragma mark 先获取本地图片或者网络图片 - (void)saveHeaderImageWith:(NSString *)path { UIImage *img = [UIImage im ...
- WebViewJavascriptBridge的详细使用
参考链接: https://www.jianshu.com/p/d12ec047ce52 https://www.jianshu.com/p/ba6358b1eec3 有demo:https://ww ...
- dedecmsV5.7 调用其他站点的数据库的数据的方法
问题:网站是用dedecmsv5.7写的,后来加了一套论坛discuzX3.4.因为dede要调用dz的数据,本来用jsonp跨域请求的数据,但是m端掉用的时候会把请求的链接的域名后面自动加个/m(不 ...
- CUDA 编程相关;tensorflow GPU 编程;关键知识点记录;CUDA 编译过程;NVCC
本文章主要是记录,cuda 编程过程中遇到的相关概念,名字解释和问题:主要是是用来备忘: cuda PTX :并行线程执行(Parallel Thread eXecution,PTX)代码是编译后的G ...