nohup命令
不挂断的运行,它会使您的脚本被忽略SIGHUP
,并重定向stdout/stderr
到一个文件nohup.out
,以便在您注销后该命令可以在后台继续运行。
1)语法
1 nohup Command [ Arg ... ] [ & ]
2)功能
nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
3)补充
操作系统的三个常用流:
0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr
SIGHUP 信号:
终端关闭时:该信号被发送到session首进程以及作为jobs提交的进程(即用&符号提交的进程)
session首进程退出时:该信号被发送到该session中的前台进程组中的每一个进程
若父进程退出导致进程组成为孤儿进程组,该进程组中有进程处于停止状态(收到SIGSTOP
或SIGTSTP
信号),该信号会被发送到该进程组中的每一个进程。
例如:在我们登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP
信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。
4)实例
运行某个脚本,退出登录后继续在后台运行
1 nohup ./test.sh >output 2>&1 &
解释:
1. 带&的命令行,即使terminal(终端)关闭,或电脑死机程序依然运行;
5)相关命令
jobs:
可以打印当前正在运行的作业及其状态。如果命令jobs
找不到它,那么它不再是该shell的子进程。( jobs 查看后台运行的进程 )
fg(Foreground):
即使运行后,也可以使用bash将后台作业带回前台nohup
。但这不会改变输出重定向,它仍将转移到文件中nohup.out
。(fg %n 让后台运行的进程n到前台来 )
bg %n 让进程n到后台去(Background);
PS: "n"为jobs查看到的进程编号.
参考网站:https://yq.aliyun.com/articles/704932
参考网站:https://www.cnblogs.com/xiaoleiel/p/8349675.html