那么,让我们从头开始:2个进程1个管道进行通信,对吗?不由于通信阻塞,一方等待另一方。我们需要通过另一个渠道获得第二个过程的结果。虽然这似乎是多余的,但事实并非如此。
让我们稍微改变一下:2个进程2个管道,您可以将一个进程称为服务器,另一个进程称为客户端。一个管道将作业发送到客户端,另一个管道用于将结果从客户端收集到服务器。
为了方便起见,我们使用进程名来调用每个管道,该进程名用于读取so、london读取london管道等等。这是管道和流程图:
london ----writes madrid pipe-------->
london <----reads london pipe------ |
^ |
| |
madrid ----writes london pipe-----> v
madrid <----reads madrid pipe---------
让我们使用“伦敦”作为服务器,“马德里”作为客户端:服务器负责结束无休止的循环。
这就是解决方案:
#!/bin/bash
shopt -u failglob
shopt -s extglob nullglob dotglob
DIR=$( cd "$( dirname "$0" )" && pwd )
function london (){
local i message answer london madrid
london=london_$RANDOM.$RANDOM.$RANDOM.$$
madrid=madrid_$RANDOM.$RANDOM.$RANDOM.$$
cd $DIR
mkfifo $london
mkfifo $madrid
( madrid $madrid $london ) &
echo "parent id: $$, child id: $!"
i=0
#a mesterious situation: sometimes '3< $london' just breaks it (?!)
exec 3<> $london
exec 4> $madrid
while true; do
message="Greetings from London!($i)"
echo "$message" >&4
read -r answer <&3
echo 'London says:> '"$answer" #>& /dev/stdout
(( i++ ))
if [[ i -gt 1 ]]; then
echo 'quit' >&4
break
fi
done
wait
cd "$DIR"
rm -rf $london
rm -rf $madrid
}
function madrid (){
local i message answer madrid london
madrid=$1
london=$2
cd $DIR
i=0
exec 3> $london
exec 4< $madrid
while true; do
read -r answer <&4
echo 'Madrid says:> '"$answer" #>& /dev/stdout
message="Greetings from Madrid!($i)"
echo "$message" >&3
(( i++ ))
if [[ $answer = 'quit' ]]; then
break
fi
done
}
london
在函数'London'前面有一条评论
exec 3<> $london
如果你把这个改成
exec 3< $london
因为它应该(!)那时,我面临着我的程序反复停滞的情况!经过一些改变
在这里,由于tty输出,程序仅在后台启动时停止。当您可以重现问题时,您应该将strace
附加到第一个进程。
我试图使用命名管道在同一台机器上的服务器和客户端进程之间进行通信。服务器向客户机发送一条消息,客户机对其执行操作并返回结果,服务器应该得到结果。 这里是服务器的代码: 以下是客户端的代码: 但是在服务器代码中,在线pipeServer。WaitForPipeDrain();我得到一个ObjectDisposedException,它说“无法访问封闭管道。” 在设置sw时,我在打开的客户端代码中也会
问题内容: 我正在尝试在两个程序之间创建双向通信通道(一个在Python中,另一个在C#中) 当我在两个C#程序或两个Python程序之间创建一个命名管道时,一切都很好,但是当我尝试(例如)从Python代码连接到C#服务器时,它不起作用: C#代码: 如果我在Python中使用代码块(永远不会返回) 如果我使用open函数,它只会建立连接,但不会发生任何事情: 现在,如果我关闭Python程序,
我想运行以下命令: 通过一些搜索,我发现这可能是由于没有设置JAVA_HOME的错误,但它在主节点的~/.bashrc中设置正确 hadoop clustter是一个Amazon Elastic Map Reduce集群。
我试图同时按下多个键的功能。我找到了一些答案。我在关注这个。 多键关闭 问题是我有一些代码可以工作。但我的版本不起作用。我完全不知道发生了什么。 答案中的代码 我的代码版本是。 在我的代码版本中,第一部分不起作用。我不知道为什么?
我想在多个python进程之间共享。以便从其他python进程发送。 如何跨多个python进程共享。 代码如下: 目标是从通道从其他python进程发送。