前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell 命名管道,进程间通信, ncat作http server

shell 命名管道,进程间通信, ncat作http server

作者头像
sunsky
发布2020-08-20 17:45:28
9950
发布2020-08-20 17:45:28
举报
文章被收录于专栏:sunskysunsky

命名管道基础

命名管道也被称为FIFO文件, 在文件系统中是可见的,并且跟其它文件一样可以读写!

命名管道特点:

  1. 当写进程向管道中写数据的时候,如果没有进程读取这些数据,写进程会堵塞
  2. 当读取管道中的数据的时候,如果没有数据,读取进程会被堵塞
  3. 当写进程堵塞的时候,有读进程读取数据,那么写进程恢复正常
  4. 当读进程堵塞的时候,如果写进程写了数据,那么读进程会读取数据,然后正常执行后面的代码 # 写进程堵塞的情况 [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

命名管道的作用,不同的进程之间通信,比如在后台执行一个备份进程,然后执行另外一个进程,等待备份完成才会处理想对应的事情!

创建管道的命令:
代码语言:javascript
复制
$ mkfifo /tmp/testpipe
$ mknod /tmp/testpipe p

下面是命名管道的一个应用例子:

reader.sh读取管道的内容,代码如下:

代码语言:javascript
复制
#!/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写数据到管道,代码如下:

代码语言:javascript
复制
#!/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调用的例子:

代码语言:javascript
复制
[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:

https://github.com/sunsky/Bash-NetCat-HTTPD/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下面是命名管道的一个应用例子:
    • reader.sh读取管道的内容,代码如下:
      • writer.sh写数据到管道,代码如下:
        • reader和writer调用的例子:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档