我通过SSH在服务器上运行liquibase update
。由于花了很长时间而我忘了使用screen
,SSH会话终止了。
然后我再次SSH和我ps -A | grep liquibase
,并且有liquibase进程。我的桌子也被锁了。
那么当SSH会话关闭时,liquibase的行为是什么?它继续工作,还是处于一种奇怪的状态?
答案 0 :(得分:1)
当终端关闭时,它会将信号SIGHUP
发送给此终端产生的所有进程。
SIGHUP
信号可以被Java应用程序捕获,显然这就是liquibase正在做的事情。看看源代码,似乎如果抓住SIGHUP
,liquibase正在尝试回滚事务,这可能需要一些时间并且可以保持数据库锁定。
相关代码以:
开头Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { ... }
请注意,当终端关闭时,SIGKILL
(进程无法处理)不会被发送到进程。