在Cent OS下使用mono运行C#程序。有一个允许外部输入进入该程序的fifo。
我也有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
仍在运行,因此脚本永远不会到达第二个echo
。
答案 0 :(得分:2)
保存mono
的PID。在后台运行cat
并保存其PID。对于wait
的PID,mono
。满足此条件时,kill
cat
的PID。
mono &
monoPID=$!
cat &
catPID=$!
wait "$monoPID"
kill "$catPID"
答案 1 :(得分:0)
你可以从$获得它!
(cat > $fifo)&
pid=$!
kill -9 "$pid"
答案 2 :(得分:0)
cat
退出时, mono
不会立即死亡,因为它正在等待stdin
。一旦有一些数据要发送,它就会以SIGPIPE
信号消失,因为管道不再有连接到另一端的进程。
不幸的是,我不是一个强硬的select
大师所以我不知道是否有可能编写cat
的“更好”版本来检查stdin
和{{ 1}}并在stdout
的另一端关闭后立即死亡。