Linux不挂断后台运行
nohup
1 | nohup command params >/dev/null 2>&1 & |
nohup
表示终端关闭时不挂断程序,否则会因为SIGHUB信号在关闭终端时自动结束程序
command params
是需要执行的命令和命令参数
>/dev/null
表示将标准输出重定向到空设备即丢弃输出,也可以改成重定向到指定的文件
2>&1
表示将stderr错误输出重定向到标准输出
最后的 &
表 示在后台执行
jobs
查看当前终端放入后台的工作,可以使用 -l 参数增加显示PID
对于前台执行的程序,通过ctrl+z,可以挂起程序,再使用
1 | bg [%job_num] |
可以将程序放到后台继续执行,%job_num是任务编号,可以省略,省略时操作最后一个非后台运行的程序
也可以将程序放回前台执行,通过
1 | fg [%job_num] |
disown
在后台执行和是否会挂断是两件事。
我们前面通过 ctrl+z,bg 把任务放在后台运行,但是终端退出仍然会被自动结束,使用
1 | disown -h [%job_num] |
可以将任务免于挂断,相当于补了一个nohup
-h
选项的意思是只标记不挂断,而不移出任务列表,通过jobs命令仍然可以看到,如果不加-h
则会移出任务列表同时标记不挂断。
screen
前面讲了如何在后台执行程序并免于挂断,但有时候我们还希望和程序交互,在后台执行就并不方便了,这时候我们可以通过screen在前台执行,同时免于挂断,一个screen就相当于一个可以随时断开随时可以恢复的终端窗口。
新建一个名为name的screen
1 | screen -S name |
重新连接到名为name的screen
1 | screen -r name |
附到一个连接状态名为name的screen
1 | screen -x name |
查看当前的screen列表
1 | screen -ls |
断开连接当前screen
1 | ctrl+a d |
reptyr
从一个终端(或后台)接收运行的进程,并将其迁移到另一个终端(的前台)。
1 | reptyr -T <PID> |
这个命令我就没成功执行过。不知为何