【问题标题】:Node child process cleanup节点子进程清理
【发布时间】:2013-09-06 15:32:23
【问题描述】:

require('child_process').spawn 开头的节点进程可以是closeexit。我认为他们也可以在某些情况下永远挂起,而无需礼貌地告诉 Node。如何确保我的 Node 应用程序总是很好地清理其子进程?我知道kill 可用于“向子进程发送信号”。这听起来不像是一个保证,特别是因为文档说“请注意,虽然该函数被称为 kill,但传递给子进程的信号实际上可能不会杀死它。kill 实际上只是向进程发送信号。”

【问题讨论】:

    标签: node.js child-process


    【解决方案1】:

    这正是 kill 在 linux 上的工作方式。对应的节点提供相同的功能。

    kill 默认发送 SIGTERM 信号。通过kill -9 强制杀死发送 SIGKILL。 SIGKILL 不能被捕获、阻止或忽略。但将此作为最后的手段。它会阻止清理锁定文件的进程。

    请参阅 linux 文档以了解 kill 和使用的 signals

    【讨论】:

    • 有趣。你会如何建议我清理这些流程呢?我假设尝试默认的 sigterm kill,然后稍后再检查并发送 sigkill 如果进程仍然存在?在发送 sigkill 之前我应该​​等待多长时间?
    • SIGTERM 可能会被进程忽略,它可以无限期地继续运行。那是你需要 SIGKILL 的时候。这取决于您的需求。如果您经常产生轻量级进程,则将超时保持在 1-2 秒以内。但是如果你启动了一个重量级的进程/守护进程,你应该让它更多,以确保像数据库服务器一样安全退出。但根据我的经验,你不应该需要 SIGKILL。更重要的是,如果您需要它,则表明程序本身存在问题。
    • 谢谢伙计。这是有用的信息。我猜 Node 的 Windows 版本存在这种微妙程度的问题,但无论如何我可能会托管在 linux 机器上。
    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2020-02-27
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多