1、写在前面
由于工作中未使用过 Linux 操作系统,学习过的 Linux 相关的知识早已变得支离破碎。现在需要将智能机器人项目后台运行在 CentOS 上,不得不再走一遍 Linux 这条道。
对于 Linux 操作系统运行的应用程序,默认情况下都是前台运行( Forceground ),这会独占命令窗口,当退出命令窗口或者 Shell 会话时,运行的程序都会随之被中断退出,就像默默执行了一次 Ctrl + C
指令一样,这个机制不适合运行项目。
对此,我四处搜寻,找到一种最适合的解决方案,旨在解决能在 Linux 操作系统上后台运行程序,同时能方便管理:前后台切换、查看、挂起和继续。
2、可行的解决方案
2.1、方案一:使用 & 符号
2.1.1、使用示例
& 符号的用法很简单,就是在执行的命令末尾加上 &
符号,该命令开启的进程即可在后台运行(background job),即成为“守护进程(daemon)”。
$ java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar &
用这种方式执行命令,命令会被放到后台运行,当前命令窗口不会被占用,可继续执行其他命令。&
符号通常用在比较耗时的命令上,如拷贝大文件。
2.1.2、前后台任务管理
- 查看任务
通过命令 jobs
显示当前终端正在运行的进程,包括前台运行和后台运行的进程。它对每个正在执行中的进程任务分配了一个序号(这个序号不是进程 ID),可以使用这些序号来引用各个进程任务。
$ jobs
[1]+ Running java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar &
- 将前台任务放到后台
# 第一步:使用组合键 Ctrl + Z 将当前任务暂停
[1]+ Stopped java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar
# 第二步:执行 bg 命令,当前任务会切换到后台,并从暂定位置继续执行
$ bg 1
[1]+ java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar &
- 将后台任务放到前台
后台任务可能有多个,每个任务有不同的标识,可以通过任务序号来指定。
# 执行 bg 命令,传递对应的 Job 的序号:
$ fg 1
**注意:**放到前台运行的任务,使用组合键 Ctrl + C
可以中断。
2.1.3、特点总结
- 此方式开启的后台任务,不会被指令
Ctrl + C
指令中断,切结果会输出到终端; - 如果终端断网或者关闭了终端,后台任务会被中断,进程退出;
- 此方案更适合配合耗时命令使用,不适合运行后台项目;
- 虽然能做到了“后台运行”,但是没有做到真正的后台,即关闭中断也能继续运行;
2.2、方案二:nohup 命令
2.2.1、使用示例
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。nohup
命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。(文末有传送带)
在使用上,nohup 命令很简单,只需要放在需要执行的命令之前即可:
# 执行命令
$ nohup java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar
# 运行成功的标志
nohup: ignoring input and appending output to 'nohup.out'
2.2.2、特点总结
- 此方案解决了即使终端关闭,进程也能继续运行的问题;
- 但不能免疫使用组合键
Ctrl + C
关闭程序;
2.3、终极方案:nohup + &
在真正的项目中,应该使用命令 nohup 结合符号 & 使用,可以同时免疫组合键 Ctrl + C
和 终端关闭(即 Session 结束),能做到让任务永久在 后台运行。
2.3.1、使用示例
# 执行命令
$ nohup java -jar /home/QQChat/qq-bot-1.0-SNAPSHOT-execute.jar &
2.3.2、常用的任务管理命令
jobs
:查看任务,返回任务编号n和进程号bg %n
:将编号为n的任务转后台运行fg %n
:将编号为n的任务转前台运行ctrl+z
:挂起当前任务ctrl+c
:结束当前任务
3、参考资料
- Linux 中的 &
- [阮一峰]Linux 守护进程的启动方法 - 走看看
- Linux nohup 命令 | 菜鸟教程
- 一分钟了解nohup和&的功效
- nohup &的用法、进程查看以及终止 - 声声慢43 - 博客园
更多推荐
Linux 后台运行程序
发布评论