专栏首页10km的专栏linux:根据主进程查找子进程

linux:根据主进程查找子进程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/10km/article/details/100603320

如下是我的项目中创建的一个java系统服务在通过systemctl status显示的服务状态

$ systemctl status facelog
● facelog.service - facelog service
   Loaded: loaded (/etc/systemd/system/facelog.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2019-09-07 17:25:29 CST; 27min ago
     Docs: https://gitee.com/l0km/facelog
  Process: 894 ExecStop=/home/gyd/workspace/facelog-delivery/facelog stop (code=exited, status=0/SUCCESS)
 Main PID: 1088 (facelog)
   CGroup: /system.slice/facelog.service
           ├─1088 /bin/bash /home/gyd/workspace/facelog-delivery/facelog start --hup
           ├─1482 /bin/bash ./facelog-service/target/start_facelog_server.sh
           └─1494 java -jar facelog-service-2.4.2-standalone.jar

9月 07 17:25:29 gyd systemd[1]: Stopped facelog service.
9月 07 17:25:29 gyd systemd[1]: Started facelog service.
9月 07 17:25:29 gyd facelog[1088]: 启动 facelog 服务(start facelog service)...
9月 07 17:25:30 gyd facelog[1088]: 执行 tail -f /home/gyd/workspace/facelog-delivery/facelog.out 查看控制台输出

可以发现服务产生了三个进程,进程ID分别为1088,1482,1494,从左到右为父/子进程关系.如果想通过netstat命令根据PID查找服务所占用的端口,就需要最右的java子进程ID。

但是通过systemctl show --property MainPID <service name> 命令只能获取最左边的父进程ID. 怎么样通过这个MainPID获取实际工作的子进程ID呢,ps的 -g选项可以根据PID过程要显示的所有属于指定PID的进程及子进程,比如:

$ ps --forest -o pid,cmd -g 1088
  PID CMD
 1088 /bin/bash /home/gyd/workspace/facelog-delivery/facelog start --hup
 1482  \_ /bin/bash ./facelog-service/target/start_facelog_server.sh
 1494      \_ java -jar facelog-service-2.4.2-standalone.jar

最后一行就是最后的子进程

这样就好办了。比如下面的过程可以获取指定服务的占用的端口:

	#!/bin/bash
	# 获取服务的MainPID,$service_name 为服务名称
	main_pid="$(systemctl show $service_name --property=MainPID)"
	main_pid=${main_pid##*=}
	# ps 命令获取最下层的子进程ID 
	spid=$(ps -o pid -g $main_pid | sed -e '1d' -e '$!d')
	# 输出端口号
	netstat -nlp 2>/dev/null|grep $spid|grep -E ':[[:digit:]]+' -o | sed 's/://g'

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • facebook/swift:构建thrift http server(1)

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • C++11:for_each_file遍历目录处理文件

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • minigui: 基于miniStudio1.2.1创建模式对话框(DialogBox)

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN

    SparkR (R on Spark) 概述 SparkDataFrame 启动: SparkSession 从 RStudio 来启动 创建 S...

    片刻
  • 【小家Spring】Spring MVC容器的web九大组件之---HandlerAdapter源码详解---一篇文章带你读懂返回值处理器HandlerMethodReturnValueHandler

    Spring MVC处理入参靠的是HandlerMethodArgumentResolver这个接口,解析返回值靠的是HandlerMethodReturnVa...

    BAT的乌托邦
  • Cloverleaf公司推出可以追踪购物者情绪的千人千面新型商店货架展示系统

    译者:熊兔兔、审校:朱玉雪 本文长度为1722字,预估阅读时间3分钟。 我们今天要向大家分享Cloverleaf公司推出的可追踪购物者情绪的新型商店货架展示系统...

    iCDO互联网数据官
  • 【带着情商做产品系列②】成长经历感悟:成熟产品经理必备特质

    作者: 陈勃,文艺青年一枚。产品策划岗供职6年。写得了文档,编得了文章,做得了诗词,玩得了金属。 在自己从事产品经理这个职位的六年间,看过不少产品经理成长相关的...

    腾讯大讲堂
  • 1 机器学习入门——线性回归第二课

    线性回归可以说是最简单的机器学习入门了,上一篇我们使用了一个最简单的模型,只有一个变量,只有一次方。机器很完美的给出了模型和正确的结论。

    天涯泪小武
  • Deno会在短期内取代Node吗?

    作为Node之父,Ryan Dahl认为Node自从他把项目移交出去后,Node的走向越来越背离了他的初衷,并且存在着很多无法解决的问题,所以他决心重新开发一个...

    葡萄城控件
  • onclick="return function()"的使用情况

    根据function的返回值,进行下一步操作,当返回值为true时,进行下一步操作,当返回值为false时,不进行操作。

    Happy、Liu

扫码关注云+社区

领取腾讯云代金券