Unix 什么';nohup和守护进程的区别是什么?
作为守护进程运行脚本与使用nohup相比,有什么意义Unix 什么';nohup和守护进程的区别是什么?,unix,daemon,Unix,Daemon,作为守护进程运行脚本与使用nohup相比,有什么意义 我知道分叉进程等方面的区别,但这对我的脚本有什么影响?在UNIX变体中,进程与终端进程(登录shell)相关联。因此,当终端进程退出时,进程也会因为这种关联而停止。当终端停止时,nohup阻止进程退出 守护进程或demon是系统启动时启动的进程,它一直运行到关机,没有用户明确要求它。因此,根据定义,它不是用户交互的一部分,而是属于系统的 如果您以用户身份访问系统,则可以使用nohup。如果您是系统管理员,则可以安装deamon进程。对于进程来
我知道分叉进程等方面的区别,但这对我的脚本有什么影响?在UNIX变体中,进程与终端进程(登录shell)相关联。因此,当终端进程退出时,进程也会因为这种关联而停止。当终端停止时,nohup阻止进程退出 守护进程或demon是系统启动时启动的进程,它一直运行到关机,没有用户明确要求它。因此,根据定义,它不是用户交互的一部分,而是属于系统的
如果您以用户身份访问系统,则可以使用nohup。如果您是系统管理员,则可以安装deamon进程。对于进程来说,这并不重要。nohup命令是穷人将进程作为守护进程运行的方式。正如Bruno Ranschaert所指出的,当您在交互式shell中运行命令时,它有一个控制终端,当控制进程(通常是您的登录shell)退出时,它将收到一个SIGHUP(挂断)信号。
nohup
命令安排输入来自/dev/null
,输出和错误转到nohup.out
,程序忽略中断、退出信号和挂断。它实际上仍然有相同的控制终端-它只是忽略终端控制。请注意,如果希望进程在后台运行,则必须告诉shell在后台运行它—至少在Solaris上是这样(即,键入“nohup sleep 20&
”;如果没有符号,进程将在前台同步运行)
通常,通过nohup
运行的进程需要时间,但不会等待其他地方的交互
通常(这意味着,如果您努力尝试,您可以发现这些规则的例外情况),守护进程是潜伏在后台的东西,与任何终端断开连接,但等待响应某种类型的输入。网络守护进程等待连接请求或UDP消息通过网络到达,执行适当的工作并再次发送响应。例如,可以考虑web服务器或DBMS
当一个进程完全后台监控自己时,它会执行nohup
代码执行的一些步骤;它重新排列其I/O,以便不连接到任何终端,将自身与进程组分离,忽略适当的信号(这可能意味着它不忽略任何信号,因为没有终端向其发送通过终端生成的任何信号)。通常,它分叉一次,父级成功退出。子进程通常在固定其进程组和会话ID等之后进行第二次分叉;然后孩子也离开了。孙子进程现在是自主的,不会显示在启动它的终端的ps
输出中
您可以查看W Richard Stevens和Stephen A Rago,或Marc J Rochkind的daemonization讨论
我有一个程序
daemonize
,它将对一个不知道如何(正确地)对自身进行daemonize的程序进行daemonize。它是为了解决程序中的缺陷而编写的,该程序本来应该对自身进行后台监控,但没有正确地完成工作。如果需要,请与我联系-查看我的个人资料。无法启动守护程序,而nohup由用户启动。成为守护程序
此链接列出了进程在成为守护进程时应采取的步骤:
由于版权问题,我无法逐字复制该列表(请参见“关于”部分),但以下是总结:
fork
(第一次)--所以我们不是组长,让家长退出setsid()
——成为新会话的负责人。只有在我们不是组长的情况下,此呼叫才有效。此新会话没有控制终端fork
(第二次)--因此我们不是会话负责人(因此无法重新获得控制终端),让父节点退出cd
到根目录——因此我们不会阻止其他目录被umount-edumask
设置为所需的值(可选)——因为我们可能继承了一个我们不想要的掩码- 如果stdout和stderr连接到终端,则将它们重定向到
nohup.out
- 忽视叹息
相同点和不同点 请注意,唯一常见的操作是重定向stdout和stderr。 成为守护进程甚至不需要忽略SIGHUP
nohup
不要求您使用“&
”作为流程的背景-这意味着您仍然可以使用ctrl-c发送SIGINT。这个过程仍然对键盘输入做出响应。它也不会自动更改stdin,因此建议您自己通过“
”进行更改
请不要将nohup
与它通常使用的其他功能混淆(例如背景)。OP特别询问了关于nohup的问题
在实践中
就实用性而言,当您想要启动一个一次性长时间运行的进程,并且该进程应该在shell退出时继续运行时,您需要使用nohup
,但是您还需要将它与stdin的后台处理和重定向结合起来。一次性作业不值得创建守护进程,但守护进程的某些属性对于nohup作业仍然有用,如“cd/
”
定期计划中的定期任务最好通过cron
(或其他一些计划程序)运行
守护进程最适合监视重复的t