1
我试图设置一个IO脚本来允许两个FIFO之间的输入/输出通信(一个FIFO用于输入,另一个用于输出)。确保bash中的进程被破坏? (可能捕获SIGINT)
当我输入输入时,我的服务器需要接收输出。 FIFO和Internals/servin
都是FIFO。我目前在等待输入时在后台运行tail
来实现此目的。
这是我当前的代码:
#!/bin/bash
# io.sh
tail -f -n 0 Internals/servout &
tpid=$!
read -p ">> " v
while [ $? -eq 0 ] && [ "$v" != "exit" ] && [ "$v" != "quit" ]; do
echo $v > Internals/servin
sleep .2
read -p ">> " v
done
kill $tpid
我运行到的主要问题是,当我不小心按Ctrl-C来结束我的脚本。发生这种情况时,tail -f -n 0 Internals/servout &
代码将继续在后台运行。如你所想,这是不可取的。
有没有办法确保tail
命令被杀死,即使发送了SIGINT或类似的信号?我正在考虑一些可以达到与Python中finally
关键字相同目的的行,或者使用$$
使tail
命令依赖于当前脚本的进程。
随时对我的不良做法发表评论 - bash
是我的新语言之一,建设性的批评是改进的最快方法。
你可以用'陷阱“杀$正品” SIGHUP SIGINT SIGTERM'杀'tail'当脚本被杀害(除非'SIGKILL'死亡,但我们所有人都知道'SIGKILL'坏了)。否则,使用'['是过时的,使用双方括号''[['。另一件事,'睡眠'只睡几秒钟!所以'睡觉.2'不可能做你所期望的。 –
呵呵,不知道'trap'命令......有时间做一些manpage搜索!关于“sleep.2”命令的话题,它正是我所需要的 - 睡眠时间为1/5秒。我的睡眠状态页面指出:“与大多数需要NUMBER的实现不同,这里NUMBER可能是一个任意的浮点数。”由于这是一个本地问题,我不必担心平台的特殊性。 – Kupiakos