Linux进程关闭和后台运行解析
摘要: 在Linux中,通过信号,关闭进程,通过忽略信号,并把进程挂载到init进程下,保证进程可以后台运行
1.问题背景
Java是跨平台的,大部分程序也都是在Linux服务器上运行的。但是很多朋友其实对服务器了解并不多,对相关知识也是一知半解。很多概念可能知道,但是并不十分清楚,仅仅是基本运用。可能很多新手朋友脱离了IDE或者web容器,都不知道怎么在服务器上运行程序。
举个简单的例子,相信很多朋友刚接触Linux的时候都遇到过这个问题。我们通过终端连接上服务器,通过命令行或者脚本运行了一个程序,然后关闭了终端连接,可能程序进程就消失了。我们也可能知道,在启动命令后面加&符号,可以进程在后台运行,关闭终端后,进程依然会消失,但如果通过shell脚本去运行,关闭终端连接后,程序可能不会消失。或者我们又知道可以通过nohup命令让进程在后台运行,并且关闭连接后,程序不会消失,到底为什么呢?
下面我会用比较通俗的语言进行讲解,如果有错误,欢迎指正。
2.进程关闭分析
当我们连接到服务器以后,运行的命令,启动的程序,设置的环境变量,都会挂在当前的连接中(非特殊设置或者特殊命令),当连接关闭时,所有东西都会消失。
进程的关闭,是通过信号进行传递的。我们通过kill
命令发送不同的信号,去关闭指定的进程, 当我们关闭终端连接时,会向当前终端连接的下游进程发送SIGHUP
信号(就是kill -1
),触发进程关闭动作。
我们可以通过ps -fe|grep XXX
查询进程信息。
[work ~]$ ps -fe|grep Test work 31133 30981 0 20:09 pts/4 00:00:00 java Test work 31277 23065 0 20:09 pts/1 00:00:00 grep --color Test
前三个分别对应 uid / pid(进程id) / ppid(父进程id),ppid其实就是当前终端连接的进程id。如果kill -9 ppid
,当前终端连接就断了。
有时候我们执行一个命令,程序会在一直在运行,我们可以通过ctrl+c
,发送的SIGINT
信号(就是kill -2
),中断程序。也可以通过ctrl+z
,发送SIGTSTP
信号,挂起进程,通过jobs
命令查看,通过fg
命令调起。
在linux中,通过命令行方式运行,属于交互模式。通过脚本方式运行属于非交互模式。 在非交互模式下,shell会对后台进程设置SIGINT信号忽略。
所以我们采用交互模式,也就是命令行方式运行java xxx &
,后台运行一个进程(在当前的终端连接下后台运行),关闭终端连接时,进程会关闭。而通过shell脚本的方式,执行java xxx &
命令,关闭连接时,java进程会把父进程id,切换挂在到init进程下(父进程id为1),也就是真正的后台运行了。
nohup
命令会忽略SIGHUP信号,因此通过nohup java xxx &
的方式运行,不论采用交互模式或者非交互模式运行,在终端连接关闭时,都会挂到init进程下。
《Linux 技巧:让进程在后台可靠运行的几种方法》文中提到了三种后台运行的命令 nohup
/setsid
/(xxx &)
,后两个命令可以直接把进程挂在init进程下,也可以通过disown
命令把进程设置忽略SIGHUP
信号
3.总结
在Linux中,通过信号,关闭进程,通过忽略信号,并把进程挂载到init进程下,保证进程可以后台运行。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL 慢日志线上问题分析及功能优化
MySQL 慢日志(slow log)是 MySQL DBA 及其他开发、运维人员需经常关注的一类信息。使用慢日志可找出执行时间较长或未走索引等 SQL 语句,为进行系统调优提供依据。本文将结合一个线上案例,分析如何正确设置 MySQL 慢日志参数和使用慢日志功能,并介绍下网易云 RDS 对 MySQL 慢日志功能的增强。 MySQL 参数组功能 网易云 RDS 实例提供了参数组管理功能,可通过参数管理界面查看绝大部分常用的 MySQL 系统参数,用户可了解当前运行值和建议值:用户还可通过参数管理页面对所列的参数进行修改,点击 “修改参数” 按钮进行在线设置,点击 “保存修改” 即可一键完成 MySQL 主从节点的参数修改:查看参数管理界面不难发现,与慢查询相关的参数比较多,那么,这些参数都是如何起作用的呢,相互关系又是如何,满足什么条件的 SQL 语句才会记录到慢日志中?只有了解这些才能更好地利用慢日志进行系统调优和问题定位。下面,我们以这个线上案例为依托,介绍下该如何正确配置慢日志参数:有用户报告,他们使用的多个 RDS 5.7 版本实例慢日志异常,明明执行了一分多钟的 SQL 语...
- 下一篇
mongodb集群监控和运维
这篇文章介绍如何动态的添加、下架mongod分片和副本集,以及如何监控和运维mongodb。 添加节点 副本集 改为仲裁节点 convert-secondary-into-arbiter 登录 mongo192.168.0.35:27005 #使用admin数据库 useadmin #查看分区状态 rs.status(); 移除副本集 rs.remove("192.168.0.35:27005") 查看配置 rs.conf() 删除shard5的数据目录,重启shard5 重新添加仲裁节点 rs.addArb("192.168.0.35:27005") 查看配置 rs.conf() 仲裁节点改成副本集 Add Members to a Replica Set 移除仲裁节点 rs.remove("192.168.0.35:27005") 删除总裁节点的数据,并重启 在 primary 添加副本节点 rs.add("192.168.0.35:27005") rs.conf() rs.status(); 刚添加的副本集状态为:STARTUP2 "stateStr":"STARTUP2", 集...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,8上快速安装Gitea,搭建Git服务器