有两个脚本,第一个在后台,第二个在前台:
trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT
my.bin > pipe1 < pipe2 &
my-term.sh pipe1 pipe2
my-term.sh
通过 stdin/stdout 与用户交互(就像 CLI 终端程序):
while read -ep "prompt> " l; do echo $l; done
my.bin
只需exit 0
脚本即可模拟。
my-term.sh
如果my.bin
因任何原因退出如何终止?
什么有效:
trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT
(my.bin > pipe1 < pipe2; kill -9 $$) &
my-term.sh pipe1 pipe2
但它可能会停止my-term.sh
清理。怎样做才正确呢?
答案1
尝试一系列信号,如果其中一个失败,请等待三秒钟(睡眠时间可能会根据应该my-term.sh
执行的操作进行调整),然后尝试另一个:
(my.bin > pipe1 < pipe2; x=$$ ; \
for sig in SIGTERM SIGINT SIGQUIT SIGABRT SIGKILL ; \
do kill -${sig} $x && break ; sleep 3s ; done ; ) &
my-term.sh pipe1 pipe2