SSH会话关闭时的liquibase行为

时间:2015-03-24 18:56:03

标签: mysql ssh liquibase

我通过SSH在服务器上运行liquibase update。由于花了很长时间而我忘了使用screen,SSH会话终止了。

然后我再次SSH和我ps -A | grep liquibase,并且有liquibase进程。我的桌子也被锁了。

那么当SSH会话关闭时,liquibase的行为是什么?它继续工作,还是处于一种奇怪的状态?

1 个答案:

答案 0 :(得分:1)

当终端关闭时,它会将信号SIGHUP发送给此终端产生的所有进程。

SIGHUP信号可以被Java应用程序捕获,显然这就是liquibase正在做的事情。看看源代码,似乎如果抓住SIGHUP,liquibase正在尝试回滚事务,这可能需要一些时间并且可以保持数据库锁定。

源代码: https://github.com/liquibase/liquibase/blob/master/liquibase-core/src/main/java/liquibase/sdk/supplier/database/AllDatabases.java

相关代码以:

开头
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { ... }

请注意,当终端关闭时,SIGKILL(进程无法处理)不会被发送到进程。