前言:

在终端执行指令时,有时候希望指令挂起,不会因为终端关闭而导致指令中断。这时候需要使用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。所以退出也能运行。&的父进程是执行的终端进程。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐