nohup 命令的功能是在不挂端的情况下执行命令,默认会输出一个 nohup.out 的文件。
用法:
nohup COMMAND [ARG]…
nohup OPTION
如果标准输入是终端,则将其从不可读的文件中重定向。 如果标准输出是终端,则尽可能将输出附加到“nohup.out”,否则附加到“$HOME/nohup.out”。 如果标准错误是终端,则将其重定向到标准输出。 要将输出保存到 FILE,请使用“nohup COMMAND > FILE”。
选项
–help 帮助文档
–version 版本信息
使用示例:
写一个实例脚本,每一秒输出一个数字,数字自动增加:
# cat nohuptest.sh #!/bin/bash count=0 while [[ $count -lt 10000 ]] do echo $count sleep 1 ((count++)) done
首先在前台执行一下,看看是什么效果:
# sh nohuptest.sh 0 1 2 3 4 5 ^C
在 linux 系统中,^C(Ctrl + C)发出的是 SIGINT 信号,可以终止进程,更多关于信号的内容,请看linux 命令:kill 详解_yspg_217的博客-CSDN博客
在接收到 SIGINT 信号后,前台执行的进程立刻就终止了。
下面用 nohup 试一下:
# nohup sh nohuptest.sh nohup: ignoring input and appending output to ‘nohup.out’ ^C # cat nohup.out 0 1 2 3 4 5 # ps -ef | grep nohup #
如果使用 nohup 接启动命令,虽然输出是从终端转到了 nohup.out 中,但是前台还是被占用,无法执行其他操作。但是在操作了 ^C 后,虽然可以进行其他操作,进程也停止了。
# nohup sh nohuptest.sh & [1] 9153 # nohup: ignoring input and appending output to ‘nohup.out’ # cat nohup.out 0 # cat nohup.out 0 1 # cat nohup.out 0 1 2 ... # ps -ef | grep nohup root 9153 6178 0 14:38 pts/0 00:00:00 sh nohuptest.sh
使用 & 后,输出一个进程ID,进程在后台执行,前台不受影响。查看 nohup.out 文件,发现数字在逐渐增加。
# nohup sh nohuptest.sh > /dev/null & [1] 10334 # nohup: ignoring input and redirecting stderr to stdout # cat nohup.out #
可以把输出重定向到 /dev/null,/dev/null 是一个黑洞,重定向到它的数据都会被扔掉。查看 nohup.out,发现是空文件。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175958.html原文链接:https://javaforall.net
