我有一个startd运行的脚本启动一个服务器,然后告诉它在launchd将其关闭时正常退出(应该在关闭时)。我的问题:在获得信号之前,告诉脚本空闲的适当的惯用方法是什么?我应该只使用while-true-sleep-1循环,还是有更好的方法来做到这一点?
#!/bin/bash
cd "`dirname "$0"`"
trap "./serverctl stop" TERM
./serverctl start
# wait to receive TERM signal.
答案 0 :(得分:3)
普通wait
的资源密集程度远低于自旋锁,即使在其中有睡眠也是如此。
答案 1 :(得分:2)
为什么要保持脚本运行?有什么缘故吗?如果您在发出信号后没有做任何事情,那么我没有理由这样做。
当你从关机中获得TERM时,你的serverctl和服务器可执行文件(如果有的话)也会同时获得TERM。
要按照设计执行此操作,您必须将serverctl脚本安装为rc脚本,然后让init(start和)停止它。 Here我描述了如何设置最初不是作为服务器工作的服务器进程。
答案 2 :(得分:2)
你可以简单地使用"睡眠无限"。如果您想在关机时执行更多操作,并且不想为此创建功能,则可以选择:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<input id="approved_btn" value="Approve" class="btn" title="Approve" name="apv" type="submit" onclick="window.open('https://www.google.com')">
</body>
</html>
<script type="text/javascript">
if(document.URL.indexOf("") >= 0) {document.getElementById('approved_btn').click();
}
try {Typekit.load();} catch(e) {}
</script>
另一种选择&#34;睡眠无限&#34; (看来busybox并不支持它)可能是&#34; tail -fn0 $ 0&#34;例如。