美文网首页
[转]Shell 脚本如何传递 SIGTERM 信号给子程序

[转]Shell 脚本如何传递 SIGTERM 信号给子程序

作者: 贺大伟 | 来源:发表于2020-12-29 20:16 被阅读0次

假如你写了个 shell 脚本,来运行目标程序,比如 java,然后再用 supervisor 来配置启动这个 shell 脚本。cat start.sh

#!/bin/bash 

# Prepare the JVM command line... $JAVA_EXECUTABLE $JAVA_ARGS 

# Clean up...

cat supervisor.conf

[program:testjava]

command=/home/kyle/testjava/start.sh

directory = /home/kyle/testjava

autorestart=true

user=ubuntu

redirect_stderr = true

stdout_logfile = /var/log/supervisor/testjava.log

这时候会有个问题,当 supervisor stop 你的程序的时候,shell 脚本退出了,然后程序却还在。

这是因为 TERM 信号被 shell 进程接收到了,但是 shell 并没有把信号转给子进程。

有个简单的解决办法,就是在程序运行命令前面,加上 exec,这样程序进程会替换当前的 bash shell 进程。

#!/bin/bash

...

exec$JAVA_EXECUTABLE $JAVA_ARGS

但是这个方案有个问题,如果想在 shell 脚本中,捕捉到程序退出,然后做一些事情,就没有办法了。

这时候可以使用 wait,以及 trap 命令来实现,具体可以搜索下这两个命令的文档。

#!/bin/bash

_term() {

  echo"Caught SIGTERM signal!"

  kill-TERM "$child"2>/dev/null

}

trap_term SIGTERM

echo"Doing some initial work...";

/bin/start/main/server--nodaemon &

child=$!

wait "$child"

#!/bin/bash

...

trap'kill -TERM $PID'TERM INT

$JAVA_EXECUTABLE $JAVA_ARGS &

PID=$!

wait $PID

trap- TERM INT

wait $PID

EXIT_STATUS=$?

...

参考资料:

相关文章

  • [转]Shell 脚本如何传递 SIGTERM 信号给子程序

    假如你写了个 shell 脚本,来运行目标程序,比如 java,然后再用 supervisor 来配置启动这个 s...

  • 信号(三):Bash 中的信号

    当没有任何捕获时,一个交互式 Bash Shell 会忽略 SIGTERM 和 SIGQUIT 信号。由 Bash...

  • 工具 | Shell 教程笔记 (2)

    Shell 传递参数 在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n 其他用法: 参考 ...

  • shell(三)

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一...

  • Shell 传递参数

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n代表一个...

  • 学习Shell - 传递参数

    Shell传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个...

  • shell传递参数

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n代表一个...

  • Shell 传递参数

    Shell 传递参数我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个...

  • shell脚本如何传递给子脚本命令行参数

    shell脚本如何传递给子脚本命令行参数 shell脚本可以使用getops来分析命令行参数,现在的一个使用场景是...

  • Shell 传递参数

    Shell传递参数 我们可以在执行Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n代表一个数字...

网友评论

      本文标题:[转]Shell 脚本如何传递 SIGTERM 信号给子程序

      本文链接:https://www.haomeiwen.com/subject/ivsqoktx.html