摘要:如何在后台运行交互式任务?
详细信息:我试图在 ash shell (Busybox) 下运行这个简单的脚本作为后台任务。
我的脚本.sh&
但是脚本立即停止...
[1]+ 停止(tty 输入)myscript.sh
myscript.sh 内容...(仅相关部分,除此之外我捕获 SIGINT、SIGHUP 等)
#!/bin/sh
catpid=0
START_COPY()
{
cat /dev/charfile > /path/outfile &
catpid = $!
}
STOP_COPY()
{
kill catpid
}
netcat SOME_IP PORT | while read EVENT
do
case $EVENT in
start) START_COPY;;
stop) STOP_COPY;;
esac
done
通过简单的命令行测试,我发现 bot cat 和 netcat 尝试从 tty 读取。请注意,此 netcat 版本没有 -e 来抑制 tty。
现在可以做些什么来避免 myscript 停止?
我尝试过的事情没有任何成功:
1) netcat/cat ... < /dev/tty (或 的输出tty
)
2) 使用 () 在子 shell 中运行包含 cat 和 netcat 的块。这可能有效,但是如何获取猫的 PID?
交给各位专家...
问题依然存在。一个简单的测试供大家尝试:
1) 在一个终端运行 netcat -l -p 11111 (不带 &)
2)在另一个终端运行 netcat localhost 11111 & (这应该会在一段时间后停止并显示消息 Stopped (TTY input) )
如何避免这种情况?