1.简介
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out
文件不可写,输出重定向到 $HOME/nohup.out 文件中。
注意:在命令的末尾加个&符号后,程序可以在后台运行,但是一旦当前终端关闭(即退出当前帐户),该程序就会停止运行。而是用 nohup 命令可以实现退出当前终端,也可以让程序在后台运行
2.使用
1.语法
nohup Command [ Arg … ] [ & ]
2.参数
Command :要执行的命令。
Arg :一些参数,可以指定输出文件。
& :让命令在后台执行,但是一旦当前终端关闭(即退出当前帐户),该程序就会停止运行
3.示例
# 后台运行test.sh脚本
nohup bash test.sh &
在终端如果看到以下输出说明运行成功
appending output to nohup.out
注意: 如果未加 & ,前台运行的话,Ctrl+C关闭后该脚本即结束运行
# 查看进程
ps -ef |grep test.sh
具有方框中的进程即成功,此时即使将当前终端关闭此进程仍将继续进行
结束进程:
kill -9 17670
使用setsid命令可实现同样效果
setsid命令子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如果要脱离这些,代码中可通过调用setsid来实现。
命令行或脚本中可以通过使用命令setsid来运行程序实现。setsid帮助一个进程脱离从父进程继承而来的已打开的终端、隶属进程组和隶属的会话。
例如:
setsid bash test.sh &
注意:使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。