- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用shell实现进程间信息交换几种方法
shell实现Unix进程间信息交换的几种方法
九州数码 李建斌
---- 本文将介绍在SCO OpenServer5.0.5系统中使用shell语言来实现进程间信息交换的几种方法:
使用命名管道实现进程间信息交换
使用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 /tmp/pipe1
----在终端上运行的是雇员签到程序/tmp/text1。每个雇员在任何一台终端上键入自己的名字或代码,程序/tmp/text1将把这个名字连同当时的签到时间送入命名管道。
/tmp/text1程序:
tty=‘who am I | awk ‘{print $2}’’
while :
do
echo “Enter your name: \c /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
二、使用kill命令和trap语句
---- 在Unix系统中,当检测到一个异常的内部状态,或者硬件及外部设备发出请求,或者执行某些指令时,将会向系统中的进程发出信号报告事件产生。当进程捕获到这些信号后,系统便转去执行预先设定的默认程序,完成指定的动作;这些预先设定的默认程序称之为信号的系统陷阱。
----在shell中,使用trap语句为信号设置新的陷阱。当shell 捕获到一个信号时(信号11除外,因为shell本身要利用这个信号进行内存分配),它将这个信号传递给所有当前正在执行的程序(父程序和子程序),并分别执行父程序和子程序中已设置的信号陷阱。一旦陷阱程序执行结束,便返回中断点,继续执行原来的程序流程。
trap语句的基本格式:
trap command_list signal_list
----command_list: 由一个或多个命令(或命令组)构成的命令列表。当命令列表中含有多个命令时要用单引号或双引号括起来,并且各命令间要用分号隔开。
---- signal_list:由一个或多个信号值构成的信号列表,各信号值间要用空格分开。
----在一个shell程序(父程序)中重新设置信号的陷阱并
文档评论(0)