科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Shell实现Unix进程间信息交换的几种方法

Shell实现Unix进程间信息交换的几种方法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

命名管道是一种先进先出(FIFO)的数据结构,它允许两个进程通过管道联接实现信息交换......

作者:蓝色键盘 来源:天极论坛 2007年10月28日

关键字: shell unix 信息交换 Linux

  • 评论
  • 分享微博
  • 分享邮件
使用命名管道实现进程间信息交换

  使用kill命令和trap语句实现进程间信息交换

  使用点命令“.”实现进程间信息交换

  使用export语句实现父进程对子进程的信息传递

  一、使用命名管道

  命名管道是一种先进先出(FIFO)的数据结构,它允许两个进程通过管道联接实现信息交换。在Unix系统中,命名管道是一种特殊类型的文件,因此可以对命名管道进行读写操作;当然,同样也会有读写和执行等权限的限制。

  通过下面的命令可以创建一个命名管道:
  /etc/mknod pipe_name p

  其中“pipe_name”是要创建的命名管道的名字,参数p 必须出现在命名管道名字之后。

  命名管道文件被创建后,一些进程就可以不断地将信息写入命名管道文件里,而另一些进程也可以不断地从命名管道文件中读取信息。对命名管道文件的读写操作是可以同时进行的。下面的例子显示命名管道的工作过程。

  进程A、B、C中运行的程序只是一条简单的echo命令,它们不断地把信息写入到命名管道文件/tmp/pipe1中。与此同时,程序中的“read msg” 命令不断地从命名管道文件/tmp/pipe1中读取这些信息,从而实现这些进程间的信息交换。

  程序执行时,首先创建命名管道文件,此时程序处于等待状态,直到A、B、C进程中某一个进程往命名管道中写入信息时,程序才继续往下执行。使用rm命令可以删除命名管道文件从而清除已设置的命名管道。

  下面是一个用于记录考勤的例子:

  在主机上运行的程序/tmp/text产生命名管道/tmp/pipe1,并不断地从命名管道中读取信息送屏幕上显示。

/tmp/text程序:
if [ ! -p /tmp/pipe1 ]
then
/etc/mknode /tmp/pipe1 p
fi
while :
do
read msg
if [ “$msg" = “" ]
then
continue
else
echo “$msg"
fi
done /dev/$tty
read name
today=‘date’
echo “$name\t$today"
done > /tmp/pipe1

  当雇员从终端上输入自己的姓名后,运行/tmp/text程序的主机将显示类似下面的结果:

wang Thu Jan 28 09:29:26 BTJ 1999
he Thu Jan 28 09:29:26 BTJ 1999
cheng Thu Jan 28 09:30:26 BTJ 1999
zhang Thu Jan 28 09:31:26 BTJ 1999
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章