3

在 Cent OS 下使用 mono 运行 C# 程序。有一个先进先出,允许外部输入进入该程序。

我还必须cat接受来自运行单声道程序的屏幕会话的输入。

#! /bin/bash -
echo "Starting server"
mono --gc=sgen Server-CLI.exe < $fifo &
echo $$ > $PIDFILE
cat > $fifo
echo "Server stopped. Cleaning up"
rm -f $fifo
rm -f $PIDFILE

cat单声道程序退出时如何退出?现在,如果单声道程序退出,cat仍在运行,因此脚本永远不会到达 2nd echo

4

3 回答 3

2

保存 的 PID mono。在后台运行cat并保存其 PID。wait对于 的 PID mono。当满足这一点时,kill的 PID cat

mono &
monoPID=$!
cat &
catPID=$!
wait "$monoPID"
kill "$catPID"
于 2012-06-09T22:12:02.113 回答
0

你可以从$中得到它!

(cat > $fifo)& 
pid=$!

kill -9 "$pid"
于 2012-06-09T22:10:15.890 回答
0

cat退出时不会立即死亡,mono因为它正在等待它的stdin. 一旦它有一些数据要发送,它就会带着SIGPIPE信号死掉,因为管道不再有连接到另一端的进程。

不幸的是,我不是一个坚定的select大师,所以我不知道是否有可能编写一个“更好”的版本cat来检查stdin并在另一端关闭时stdout立即死亡。stdout

于 2012-06-09T22:48:55.807 回答