【发布时间】:2017-11-04 23:55:45
【问题描述】:
我有以下脚本:
我的脚本.sh
#!/bin/bash
set -e
set -o pipefail
tee /tmp/my.log | my-binary
...运行时如下:
$ cat my-data.txt | my-script.sh
我假设当我的二进制文件崩溃或被杀死时,脚本和tee 的副本应该立即退出。然而,当 shell 本身退出时,tee 不会。
【问题讨论】:
-
这还不足以让其他人重现该问题。 “杀死它”带有哪个特定信号?如果
my-binary选择以退出以外的方式处理信号,则信号可能会被捕获。 -
(顺便说一句,
pipefail将确保退出状态指示失败,如果 tee 失败但 my-binary 成功退出,但如果它是my-binary失败,pipefail没有任何效果)。 -
...
set -e也无关紧要,尽管在大多数情况下它是portability issues 和general nonintuitiveness 的来源(如果赶时间,请跳过寓言并查看练习)。 -
我使用“kill -9”并且发现 my-script.sh 进程被杀死。但是 tee 过程仍然存在。
-
谢谢——这有助于澄清问题。