前言:
在终端执行指令时,有时候希望指令挂起,不会因为终端关闭而导致指令中断。这时候需要使用nohup或&指令来实现。
1. nohup
nohup英文全称为no hang up(不挂起),用于在Linux系统不挂断地运行命令,退出终端不会影响程序的运行。
nohup命令,在默认情况下(非重定向时),会输出一个名叫nohup.out的文件到当前目录下,如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中。
nohup ./run_funnel.sh
2. &
后台运行符&用于在后台执行命令,使用Ctrl+C程序不会中断,但终端关闭后运行会中断。
./run_funnel.sh &
3. nohup+&
双剑合璧,Ctrl+C和关闭终端都不会导致程序停止。
nohup ./run_funnel.sh &
4. 查看进程
ps -aux | grep "run_funnel.sh"
参数说明:
- a: 显示所有程序
- u: 以用户为主的格式来显示
- x: 显示所有程序,不区分终端机
5. kill进程
kill -9 xxxx
参考:知乎回答-孙文奇
如何评价 Linux nohup 命令和后台运行符 & 的使用? - 知乎
6. 2>&1
在Linux系统中0 1 2是一个文件描述符
2>&1:将标准错误输出2重定向到标准输出1中,这样2就合并到1中一起输出。
nohup ./run_funnel.sh > outlog.txt 2>&1 &
> outlog.txt 表示将终端输出保存到txt中
2>&1 表示将错误输出2定向到标注输出1中一起输出
& 后台挂起
nohup指令和&的区别:
父进程不一样,nohup的父进程的id是1。所以退出也能运行。&的父进程是执行的终端进程。
|