将“sigterm”从Java发送到Bash脚本

时间:2016-04-20 10:15:10

标签: java bash shell docker sigterm

我正在从名为start.sh的Bash脚本启动Java代码。 Bash脚本启动Java代码,然后运行Java代码。在Java程序结束时,我想将信号发送回Bash脚本以终止。请记住,Bash脚本在PID = 1的情况下运行。我必须终止PID 1进程。

我设置了bash脚本,使其在无限循环中运行,waits用于终止信号:

#!/bin/bash

# Run the java code here..

# Listen for an exit command.

trap 'exit 0' SIGTERM
while true; do :; done

我正在使用Docker实例,信号为sigterm。我正在学习本教程:https://www.ctl.io/developers/blog/post/gracefully-stopping-docker-containers/,它解释了如何从命令行发送sigterm。我希望自动化这个过程,并在Java程序结束后立即从内部关闭/终止docker实例。

如何将信号发送回首先启动Java代码的bash脚本?

我应该关注 this method将信号作为参数发送给bash脚本?或者它会启动另一个具有不同PID(而不是1)的bash脚本。

需要帮助!

1 个答案:

答案 0 :(得分:0)

  1. 写'设置-e'在bash脚本的第二行。
  2. 不要使用陷阱。替换它 '执行your_java_code_run'。
  3. 通过这种方式,docker在java代码运行结束后获得SIGTERM。

    例如:

    #!/usr/bin/env bash
    set -e
    
    someOtherCodeIfNeed
    
    exec your_java_code_run