我是 Ubuntu 新手。我学习了一个命令
nohup [command]
- 运行<command>
不受挂断信号影响
我不明白“不受挂断信号影响“。它谈论的是什么类型的信号?请举例说明如何使用这个命令。
答案1
假设您已从 gedit
终端打开文本编辑器并对其进行操作。如果您在关闭之前关闭终端gedit
,则 gedit 也会在关闭终端时立即关闭。那么这里发生了什么?gedit
在终端下作为子进程运行。当您关闭终端时挂断信号( SIGHUP
) 被发送给终止子进程的进程。
另一方面,如果您希望子进程(此处gedit
)在关闭父终端后继续运行,则您希望进程不受挂断信号的影响。这样关闭终端就不会关闭子进程。nohup
正是做这个工作的。
nohup
不会断开终端上的命令,它会使您的脚本忽略 SIGHUP,并将 stdout/stderr 重定向到文件 nohup.out,以便命令可以在您注销后继续在后台运行。如果您关闭 shell/终端或注销,您的命令将不再是该 shell 的子命令。它属于 init 进程。如果您搜索,pstree
您会发现它现在归进程 1 (init) 所有。由于前台不再存在,因此无法将其带回前台。
答案2
除了@sourvac 所写的内容之外,这是过去的遗留问题,当时人们通过纯文本哑终端登录,通常通过(原始的模拟 110 波特)调制解调器:“挂断”的字面意思是“挂断电话”。
一个 pid不受挂断信号影响在您退出后仍将继续运行并挂断电话. 这非常有用慢的当工作连续运行数小时而您无法保持登录状态时(其他人需要使用终端,您需要使用电话,线路中的静电可能会“干扰”连接,等等)。