Alliot's blog

Linux后台运行进程

  有时候我们需要将一个进程丢到后台运行,甚至需要在我们退出终端后还能继续运行。本文将几种实现方式与区别整理了一下。

nohup

  nohup 的作用是 “使程序运行时不挂起,不向 tty 输出信息” ,比如:

1
nohup ping www.iots.vip

这样的话,屏幕不会显示 ping 的运行输出,而只是提示 nohup: ignoring input and appending output to ‘nohup.out’ ,这个时候,在当前目录下会生成一个 nohup.out 里面内容即为 ping 的输出内容。我们可以指定输出的文件,如:

1
nohup ping www.iots.vip > ping.mesg

那么,回到文题,怎样实现将进程丢到后台还能继续运行呢?在上面的例子中也就是让系统在后台一直 ping www.iots.vip,我们可以使用 & 来实现将进程丢到后台:

1
nohup ping www.iots.vip > ping.msg 2>&1 &

这里实现的是将 ping 的正确输出信息输出至 ping.msg 文件,而屏幕标准输出只输出错误信息,同时将进程丢进后台。

Ctrl + Z

  Ctrl + Z 与上面的不同,Ctrl + Z 会将当前进程挂起丢入后台,也就是暂停至后台,不会继续运行。挂起的进程通过 jobs 可以看到:

1
2
3
ping www.iots.vip # 按下 Ctrl + Z
^Z
[1]+ Stopped ping www.iots.vip

执行 jobs 可以看到:

1
2
jobs
[1]+ Stopped ping www.iots.vip

使用 bg %任务号 可以在激活挂起的任务让其在后台运行:

1
bg %1

这里将会不停的输出 ping 的回复,必须要退出终端才能终止,在所运行的程序有标准输出的时候不推荐这样使用。
使用 fg %任务号 可以在激活挂起的任务让其在前台运行。

后记

值得注意的是,Ctrl + Z 后使用 bg 激活的后台运行进程以及使用 nohup & 在后台运行的进程,在重登终端的时候 jobs 均不会显示,只能通过 ps -ef 看到,要停止运行也只能使用 kill 来停止。

------ 本文结束 ------

本文标题:Linux后台运行进程

文章作者:Alliot

发布时间:2019年08月12日 - 17:08

最后更新:2019年08月13日 - 14:08

原始链接:https://www.iots.vip/post/linux-run-in-background.html

许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 转载请保留原文链接及作者。

如果此文为您解决燃眉之急或是带来些许明朗,不妨打赏Alliot一杯香茗或是一杯咖啡