当前位置: 首页 > 知识库问答 >
问题:

bash对信号没有反应

巴宏恺
2023-03-14

让我们考虑以下脚本:

#!/bin/bash
while true ; do: ; done

运行脚本后,bash进入循环,但可以中断(通过按Ctrl-C或发出kill-2命令)或终止(通过发出kill命令)。一切都很好。但是现在让我们考虑另一个脚本

#!/bin/bash
sleep 60

运行此脚本后,bash进程不再对SIGINT或SIGTERM信号作出反应。当然,它会对按下Ctrl-C或终止睡眠进程作出反应,但我感兴趣的是,使bash进程本身对这些信号作出反应。我需要这个,因为我正在用bash脚本作为入口点构建Docker映像,Docker将信号发送到容器中的PID 1,在我的例子中,这就是bash进程。我正在努力使容器优雅地关闭。Bash进程不会对信号做出反应,所以Docker会杀死它以关闭容器。

任何帮助都将不胜感激。

共有2个答案

鲁永福
2023-03-14

如果您的docker API 1.25,则可以运行容器

docker run --init -it

--init-在容器内运行一个初始化,它转发信号并从docker指南中获取过程描述https://docs.docker.com/engine/reference/commandline/run/

别俊誉
2023-03-14

考虑这个Docker文件

from centos:7

COPY entrypoint.sh /usr/bin/entrypoint.sh
RUN chmod 760 /usr/bin/entrypoint.sh

ENTRYPOINT ["/usr/bin/entrypoint.sh"]

使用相应的entrypoint.sh脚本

#!/usr/bin/env bash

function finish {
    # stop holding process here
    echo "exciting gracefully . . ."
    kill -TERM "$child" 2>/dev/null
    exit 0
}

trap finish SIGHUP SIGINT SIGQUIT SIGTERM

# your process which holds the container, eg
sleep 60 &
child=$!
wait "$child

建立形象:

docker build --no-cache -t overflow .

运行图像:

docker run overflow:latest

如果CTRLC在60秒内,您将看到输出:

优雅地令人激动。

显示信号首先终止了脚本,然后终止了容器。

在这里可以找到关于信号和容器的好资源

 类似资料:
  • 问题内容: bash 命令非常酷。我知道为什么它显示行号,但是有没有办法我可以调用history命令并抑制行号? 这里的重点是使用历史命令,所以请不要回复 电流输出: 历史图形源。 所需输出: 历史图形源。 感谢大家的出色解决方案。保罗(Paul)是最简单的人,将为我工作,因为我的bash历史记录大小设置为2000。 我还想分享今天早上发现的一篇很酷的文章。它现在有几个不错的选择,例如将重复的条目

  • 我真的很困惑为什么这不起作用,因为大多数关于信号量的示例都是多线程的,而不是多处理的,我有点困惑。我的代码不能工作,除非我把它放在sem_wait上面。 本质上是自己做信号量...这就像sem_wait只检查一次值,然后永远保持不变。我有两个生产者和一个消费者。以下是它的结构: 没有这个代码段,生产者2永远不会运行。在生产者2但不是1中使用该代码段,生产者1运行,然后运行2,然后停止。两人都需要这

  • 问题内容: 相当于在Ruby和Perl中使用Python的反引号是什么?也就是说,在Ruby中,我可以这样做: Python中的等效语句是什么样的?我已经尝试过了,但这会将结果放入标准输出,并向我返回该操作的错误代码。 问题答案: output = os.popen(‘cat /tmp/baz’).read()

  • 问题内容: 我有反引号构建MYSQL查询。例如, 相对于: 我认为我是从Phpmyadmin导出中获得这种做法的,并且据我了解,甚至Rails都会生成这样的查询。 但是如今,我看到这样构建的查询越来越少了,而且代码看起来更加混乱,并且查询中带有反引号。即使有了SQL helper函数,没有它们,事情也会变得更加简单。因此,我正在考虑将它们抛在后面。 我想找出这种做法是否还有其他含义,例如SQL(在

  • 我已经使用实现了抽屉菜单,但是当我点击项目时,没有显示涟漪效果。我的设备正在运行API 22。 片段导航。xml: 我的行是: 问题是什么,我该如何解决?

  • 本章将介绍如何在您认证的微信公众号、订阅号中集成小能在线咨询功能 微信对接准备 微信对接模式介绍 微信授权模式 微信极速模式 微信开发模式-真Token方案 微信开发模式-假Token方案