0

我正在从名为start.sh. 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 脚本?

我应该按照 这种方法将信号作为参数发送到 bash 脚本吗?或者它会启动另一个具有不同 PID(不是 1)的 bash 脚本。

需要帮助!

4

1 回答 1

0
  1. 在 bash 脚本的第二行写“set -e”。
  2. 不要使用陷阱和while。将其替换为“exec your_java_code_run”。

通过这种方式docker在java代码运行结束后获取SIGTERM。

示例:

#!/usr/bin/env bash
set -e

someOtherCodeIfNeed

exec your_java_code_run
于 2016-04-21T18:56:47.580 回答