Bash脚本入口点(PID = 1)只有在假陷阱(没有任何东西)存在时才会杀死`tail`子进程

时间:2017-08-20 01:47:44

标签: linux bash shell docker process

我在Bash脚本中遇到了一个奇怪的行为,我有Bash脚本与PID 1一起运行(entrypoint Docker容器,如果你不熟悉Docker,我假设你可以忽略这个信息)。

当我运行以下脚本时,SIGTERM很快终止所有内容,一切似乎都很好(请记住sshd服务不存在!我的整个系统只启动这个脚本不再运行tail,但到目前为止这不是问题。)

#!/bin/bash

trap "pkill sshd" SIGTERM

export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH

if [ -f /usr/local/samba/etc/smb.conf ]; then
        exec /usr/local/samba/sbin/samba -i
else
        tail -f /dev/null & wait ${!}
fi

当我删除trap时出现问题。现在我的系统挂起了,似乎因为尾部直到运行并且由于某种原因没有结束。 (如果你比Docker更熟悉,Docker等待10秒,然后杀死容器,因为它没有响应SIGTERM,如果你不熟悉Docker,请忽略这个信息)。

#!/bin/bash

export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH

if [ -f /usr/local/samba/etc/smb.conf ]; then
        exec /usr/local/samba/sbin/samba -i
else
        tail -f /dev/null & wait ${!}
fi

有人可以向我解释究竟是什么问题吗?为什么假的trap会使一切运转起来(虽然它几乎没有任何作用,但它的确有效,因为它就在那里)。

我还是想提一下,使用空的traptrap "" SIGTERM没有帮助,陷阱中的某些东西应该可以工作(即使它什么都不做)。

希望有人可以帮助我,谢谢!

0 个答案:

没有答案