Shell脚本的运行方式总结

Shell脚本的运行方式总结

背景

这几天写shell,需要捞取在跑的Java进程。

shell中我需要传入两个参数,标识各模块名称,再使用ps -ef|grep java进行捞取。

由于shell两个参数都是java。shell参数java与grep java一致,而bash运行的会多两个运行运程(实际上是子shell),bash shell脚本启动会莫名多出两个PID

如:

使用bash -x调试,可以看到1930、4463、4464四个Pid
在这里插入图片描述

直接用ps,看不出来4463、4464两个进程。直接使用ps也看不到
在这里插入图片描述

简单复现

  1. 使用java -jar启动java程序

  2. 使用shell捞取在运行时的程序

#!/bin/shell
#filename=get_main_PID

get_main_PID(){
    mainProcessName=$1

    echo "===original==="
    temp=$(ps -ef|grep $mainProcessName|grep -v grep)
    echo "$temp"

    echo "===grep bash===="
    temp1=$(ps -ef|grep $mainProcessName|grep -v grep|grep -v bash)
    echo "$temp1"
}
get_main_PID $1

  1. 使用三种方式启动

使用bash的话,会多出两个进程。这就是两个PID的由来。
在这里插入图片描述

shell的启动方式总结

  • . shell脚本启动:再当前shell环境中执行脚本
  • bash shell脚本j启动:在子shell中启动并执行脚本

总结

  • 善于使用调试工具,逐步缩小定位范围
  • 多学习多积累。基础不牢,定位时间太久了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值