gpt4 book ai didi

unix - nohup 和守护进程有什么区别?

转载 作者:行者123 更新时间:2023-12-03 05:47:29 30 4
gpt4 key购买 nike

与使用 nohup 相比,将脚本作为守护进程运行有何影响?

我知道 fork 进程等方面有什么区别,但这对我的脚本有什么影响?

最佳答案

nohup 命令是穷人将进程作为守护进程运行的方式。正如 Bruno Ranschaert 所指出的,当您在交互式 shell 中运行命令时,它有一个控制终端,并且当控制进程(通常是您的登录 shell)退出时将收到 SIGHUP(挂断)信号。 nohup 命令安排来自 /dev/null 的输入,并将输出和错误发送到 nohup.out,以及程序忽略中断、退出信号和挂起。它实际上仍然具有相同的控制终端 - 它只是忽略终端控制。请注意,如果您希望该进程在后台运行,则必须告诉 shell 在后台运行它 - 至少在 Solaris 上(即,您键入 'nohup sleep 20 &';没有&符号,进程在前台同步运行)。

通常,通过 nohup 运行的进程需要时间,但不会等待来自其他地方的交互。

通常(这意味着如果你努力尝试,你可以找到这些规则的异常(exception)),守护进程是潜伏在后台的东西,与任何终端断开连接,但等待响应某种输入。网络守护程序等待连接请求或 UDP 消息通过网络到达,执行适当的工作并再次发回响应。例如,考虑一个 Web 服务器或 DBMS。

当进程完全守护进程时,它会执行 nohup 代码所执行的一些步骤;它重新排列其 I/O,因此它不会连接到任何终端,将自身与进程组分离,忽略适当的信号(这可能意味着它不会忽略任何信号,因为没有终端可以向它发送任何生成的信号通过终端)。通常,它 fork 一次,父进程就会成功退出。子进程通常会在确定其进程组和 session ID等后进行第二次fork;然后 child 也退出。孙进程现在是自治的,不会显示在启动它的终端的 ps 输出中。

您可以查看Advanced Programming in the Unix Environment, 3rd Edn作者:W Richard Stevens 和 Stephen A Rago,或访问 Advanced Unix Programming, 2nd Edn作者:Marc J Rochkind,关于守护进程的讨论。

我有一个程序daemonize,它将守护一个不知道如何(正确)守护自身的程序。它是为了解决程序中的缺陷而编写的,该程序本应自行守护,但未能正确完成工作。如果您需要,请联系我 - 查看我的个人资料。

关于unix - nohup 和守护进程有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/958249/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com