首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为由&&分隔的多个命令创建PID陷阱

如何为由&&分隔的多个命令创建PID陷阱
EN

Stack Overflow用户
提问于 2015-11-27 15:49:49
回答 2查看 615关注 0票数 5

我在一个打开jdk8的Ubuntu15.04容器中运行StarDoG4.0,运行良好。我想用陷阱来处理优雅地关闭了星狗

为了在容器中执行stardog,使它继续运行,我一直在使用以下操作,它运行得很好

代码语言:javascript
复制
$SBIN/bin/stardog-admin server start && (tail -f /storage/stardog.log &) && while (pidof java > /dev/null); do sleep 1; done

如果没有下面的内容,容器将运行几秒钟并停止

代码语言:javascript
复制
&& (tail -f /storage/stardog.log &) && while (pidof java > /dev/null); do sleep 1; done

但是,这会导致容器中的多个PID

代码语言:javascript
复制
root         1  0.0  0.0  18384  3236 ?        Ss   14:04   0:02 /bin/bash /stardog_binaries/startup.sh
root        45  0.1  4.9 4619052 406940 ?      Sl   14:04   0:10 java -Xms2g -Xmx2g -XX:MaxDirectMemorySize=4g -XX:SoftRefLRUPolicyMSPerMB=1 -XX:+UseParallelOldGC -XX:+UseCompressedOops -Djavax.xml.datatype.DatatypeFactory=org.apache.xerc
root        97  0.0  0.0   4412   740 ?        S    14:04   0:00 tail -f /storage/stardog.log
root     12108  0.2  0.0  18184  3100 ?        Ss   15:44   0:00 bash
root     12122  0.0  0.0   4376   784 ?        S    15:44   0:00 sleep 1

当容器关闭时,下面的陷阱无法关闭stardog

代码语言:javascript
复制
trap 'kill -TERM $PID' TERM INT
$SBIN/bin/stardog-admin server start && (tail -f /storage/stardog.log &) && while (pidof java > /dev/null); do sleep 1; done
PID=$!
wait $PID
trap - TERM INT
wait $PID
EXIT_STATUS=$?

因此,我的问题是如何正确地捕获$SBIN/bin/ stardog服务器启动,以便当容器关闭时,stardog优雅地退出。

向康德问好

EN

Stack Overflow用户

发布于 2015-11-27 16:34:59

您可以使用专门制作的图像来处理此类问题,比如抛锚/基象-码头

参见"PID 1僵尸收割问题":通过将脚本声明为守护进程,您将确保图像正确处理关机信号。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33960873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档