Bash - 在我收到信号之前我该如何闲置?

时间:2011-12-01 06:41:19

标签: bash signals launchd

我有一个startd运行的脚本启动一个服务器,然后告诉它在launchd将其关闭时正常退出(应该在关闭时)。我的问题:在获得信号之前,告诉脚本空闲的适当的惯用方法是什么?我应该只使用while-true-sleep-1循环,还是有更好的方法来做到这一点?

#!/bin/bash

cd "`dirname "$0"`"

trap "./serverctl stop" TERM
./serverctl start

# wait to receive TERM signal.

3 个答案:

答案 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;例如。