在背景过程结束后杀死猫

时间:2012-06-09 21:37:58

标签: bash cat

在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

3 个答案:

答案 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的另一端关闭后立即死亡。