有时候我们需要将一个进程丢到后台运行,甚至需要在我们退出终端后还能继续运行。本文将几种实现方式与区别整理了一下。
nohup
nohup
的作用是 “使程序运行时不挂起,不向 tty 输出信息” ,比如:
这样的话,屏幕不会显示 ping
的运行输出,而只是提示 nohup: ignoring input and appending output to ‘nohup.out’
,这个时候,在当前目录下会生成一个 nohup.out
里面内容即为 ping
的输出内容。我们可以指定输出的文件,如:
那么,回到文题,怎样实现将进程丢到后台还能继续运行呢?在上面的例子中也就是让系统在后台一直 ping www.iots.vip
,我们可以使用 &
来实现将进程丢到后台:
这里实现的是将 ping
的正确输出信息输出至 ping.msg 文件,而屏幕标准输出只输出错误信息,同时将进程丢进后台。
Ctrl + Z
Ctrl + Z 与上面的不同,Ctrl + Z 会将当前进程挂起丢入后台,也就是暂停至后台,不会继续运行。挂起的进程通过 jobs
可以看到:
执行 jobs
可以看到:
使用 bg %任务号
可以在激活挂起的任务让其在后台运行:
这里将会不停的输出 ping 的回复,必须要退出终端才能终止,在所运行的程序有标准输出的时候不推荐这样使用。
使用 fg %任务号
可以在激活挂起的任务让其在前台运行。
后记
值得注意的是,Ctrl + Z 后使用 bg
激活的后台运行进程以及使用 nohup &
在后台运行的进程,在重登终端的时候 jobs
均不会显示,只能通过 ps -ef
看到,要停止运行也只能使用 kill
来停止。
补充: screen
2019年8月13日
感谢 @Bill 补充,screen
也是一个很棒的工具,不过需要单独安装:
|
|
通过执行 screen
来新建一个会话,使用 Ctrl + A,D 离开该会话,会话将在后台继续运行,之后 screen -ls
可以查看会话列表。 使用 screen -r pid或tty或host
恢复会话,使用 exit
可以退出会话,会话不会再运行。
screen
相比上面的方式更加方便,能做的事情也更多,
常用screen参数
|
|
常用快捷键
|
|