【问题标题】:Why my program not receive SIGTERM?为什么我的程序没有收到 SIGTERM?
【发布时间】:2012-08-10 07:24:27
【问题描述】:

我在某些服务器上使用 telnet/ssh 访问来运行特定的模拟器程序,并且该程序依赖于 SIGTERM 退出自身(如果不以交互方式输入“exit”字符串)。

当我直接终止 telnet/ssh 会话时,程序通常会在大多数服务器上自行退出。但是在某些服务器上,我的模拟器不会收到 SIGTERM 信号,并继续作为 ROOT 进程的子进程运行。那么那些悬空的进程会消耗大量的 CPU 资源。

有人可以帮我看看哪里吗?或者如何解决这种情况?

谢谢, 凯文

【问题讨论】:

  • 如果您知道它不会在哪些服务器上正常关闭,为什么不在您注销之前明确杀死它?
  • 正常情况下,我们会的。但是它是由自动化程序使用expect然后telnet到服务器并运行模拟器自动启动的,有时自动化程序可能由于其复杂性而无法正常退出。所以...
  • SIGTERM 未在哪些服务器上交付?这些服务器与提供 SIGTERM 的服务器之间还有什么不同?他们运行什么操作系统和 ssh/telnet 守护程序软件?哪些版本?

标签: ssh telnet sigterm


【解决方案1】:

编写一个包装程序

  1. 执行您的模拟器程序
  2. 模拟器退出时自行退出
  3. 当它成为根进程的子进程时,向模拟器发送 SIGTERM(如果没有效果,则在几秒钟后发送 SIGKILL)

这将是一个可怕的 hack,但根据您目前提供的信息,这是我能建议的最好方法。

【讨论】:

  • 戴夫,感谢您的回答!实际上模拟器是由一个包装器启动的。我想我可以利用包装器转储包装器本身收到的信号,看看不同服务器之间是否有任何不同。我会回复你的。
猜你喜欢
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多