简介

最近运维人员提出需求,增加一个运维页面, 查询当前的业务进程信息包括:进程名称、启动命令、启动时间、运行时间等,可以通过页面点击重启按钮,可以重启后端的一系列系统进程。

思路

java程序获取linux进程信息可以通过shell脚本获取进程信息、通过读取proc文件系统获取进程信息。 但是为了系统的安全性、方便维护等角度出发,更多的是java通过shell获取和linux交互能力。

java程序中要执行linux命令主要依赖2个类:Process和Runtime:

Process:

ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例, 该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、 检查进程的退出状态以及销毁(杀掉)进程的方法。 创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin、stdout 和 stderr) 操作都将通过三个流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程。 父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小, 如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。 当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程。 对于带有 Process 对象的 Java 进程,没有必要异步或并发执行由 Process 对象表示的进程。

特别需要注意的是:

1,创建的子进程没有自己的终端控制台,所有标注操作都会通过三个流

(getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程(父进程可通过这些流判断子进程的执行情况)

2,因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,

则可能导致子进程阻塞,甚至产生死锁

特别需要注意:如果子进程中的输入流,输出流或错误流中的内容比较多,最好使用缓存(注意上面的情况2)

Runtime

每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime方法获取当前运行时环境。 应用程序不能创建自己的Runtime类实例。

获取进程信息

获取进程的shell字符串 ps aux | grep procName| grep -v grep

java 调用shell 获取进程信息

查询所需的进程列表信息

重启业务进程

为了解决在某个进程启动失败的时候,web端可以获取到该进程的信息, 需要通过shell返回一个int值, 每个进程启动结果占用1个bit位方式实现,web端获取结果后,解决返回的结果,然后判断是否有进程启动失败。

首先准备好shell脚本,内容如下:

shell监控java接口服务_Linux系统下Java通过shell脚本监控重启服务相关推荐

  1. linux下java多线程_Linux系统下Java问题排查——cpu使用率过高或多线程锁问题

    原标题:Linux系统下Java问题排查--cpu使用率过高或多线程锁问题 一个系统.特别是多线程并发的后台系统,在某些特定场景下,可能触发系统中的bug:导致cpu一直居高不下.进程hang了或处理 ...

  2. linux java进程消失_Linux系统下的Java进程无故消失怎么办?

    Linux系统步骤的一些Java项目总是无故的消失,原来是Java进程被关闭掉了.为什么会出现这种情况呢?有可能是被系统自动清除多余进程,或是其他程序关掉了Java项目,这个时候该怎么办呢? 解决方法 ...

  3. java进程消失_Linux系统下的Java进程无故消失的解决方法

    很多用户表示,Linux系统下的一些Java项目总是会无缘无故的消失,这是为什么呢?小编认为这极有可能是被系统自动清除多余进程,或是其他程序关掉了Java项目.针对此问题,下面,U大侠小编就给大家介绍 ...

  4. java压缩文件_Linux 系统学习--Java学习第118天

    第141次(Linux) 学习主题:Linux 学习目标: 1 掌握Linux常用命令 对应作业 Linux常用命令1 如何使用cd命令切换固定位置? cd 目录名 中间必须要有空格隔开 如何使用cd ...

  5. scala linux 环境配置,LINUX系统下Java和Scala的环境配置

    最近,笔者在研究一个有关"自然语言处理"的项目,在这个项目中,需要我们用Spark进行编程.而Spark内核是由Scala语言开发的,所以在使用Spark之前,我们必须配置好Sca ...

  6. xp系统的无线配置服务器,xp系统下使用无线提示无线自动配置服务没有运行如何解决...

    越来越多的用户都喜欢使用无线方式来上网,然而有xp系统用户在使用无线的时候,却提示无线自动配置服务没有运行,要怎么解决这样的问题呢,现在为大家带来xp系统下使用无线提示无线自动配置服务没有运行的详细解 ...

  7. cc java开发环境搭建_Windows系统下java开发环境搭建

    总的来说,开发环境是程序员工作的基础,没了他,IT工作就没得开展了.话不多说,今天提供的教程是Windows系统下Java开发环境的搭建,具体如下 1.下载并安装JDK(JAVA Developmen ...

  8. 本地计算机无法启动,winxp系统下本地计算机无法启动Windows Time服务怎么办

    在使用winxp系统的时候,如果遇到时间异常的话,就要查看Windows Time服务是否启动,没启动的话就要启动,可是有时候却发现本地计算机无法启动Windows Time服务,该怎么办呢,现在为大 ...

  9. win10系统下JAVA之JDK压缩包制作方法及安装教程(环境配置)

    win10系统下JAVA之JDK压缩包制作方法及安装教程 有时进行JAVA开发,我们可能会用到不同版本的JDK,每次切换不同版本时,总不能删除之前的,重新下载一个新版本,所以通过压缩包免安装方式进行多 ...

最新文章

  1. MySQL 5.6.26 通过frm ibd 恢复数据过程
  2. 封装getByClass(JS获取class的方法封装为一个函数)
  3. TCP/IP 网络编程 (三)
  4. 利用@media screen实现网页布局的自适应
  5. 人才是培养的吗? (转)
  6. 解决oracle数据库连接不上的问题
  7. flask处理http request的时候是多线程还是多进程?
  8. si4438 与 si4432通讯
  9. Dubbo(六)使用SpringBoot搭建dubbo服务提供者工程
  10. JavaScript 实现回文解码
  11. 01 unity初识和素材导入
  12. 金仓数据库 KingbaseES 插件参考手册 pldbgapi
  13. 影响网站收录的几个因素
  14. 重要的人工神经元--感知器和Sigmod神经元
  15. IE ajax无局部刷新_se7en3_新浪博客
  16. How to use template
  17. 快速沃尔什变化(FWT)介绍
  18. Sql通过存储过程生成全年日历考勤表数据
  19. 整理前端综合笔记_从入门到入坟
  20. android图标为什么是机器人,安卓图标为什么是个机器人?让鸿蒙来告诉你

热门文章

  1. springboot项目使用junit4进行单元测试,maven项目使用junit4进行单元测试
  2. 2022-2028年中国汽车工业行业研究及前瞻分析报告
  3. 2022-2028年中国橡胶漆产业发展动态及未来趋势预测报告
  4. 建议使用更加安全的ast.literal_eval去替代eval
  5. redis 双写一致性 看一篇成高手系列1
  6. 【Spring】基于XML的IOC案例
  7. 1-1 机器学习和深度学习综述-paddle
  8. 合肥工业大学—SQL Server数据库实验五:创建和删除索引
  9. cuDNN 功能模块解析
  10. 为什么您应该使用基于标准的开发实践