Linux 动态监听进程shell
背景
前几天在研究线程的时候,看到一句话说java里的线程Thread.run都会在Linux中fork一个的轻量级进程,于是就想验证一下(笔者的机器是Linux的)。当时用top命令的时候,进程总是跳来跳去的,看起来很辛苦,有个工具叫htop,支持filter,感觉也没那么直观。根据在网上查到的资料和man top,整理出了两条语句:
top -p pgrep java | tr "\\n" "," | sed 's/,$//'
top -d 3 -n 100 -b | egrep 'top - | PID | java'
每次手动敲上面的命令比较有点辛苦,于是写了一个shell脚本希望能监听指定进程名的进程变化,这篇文章也由此而来。第一次真正写shell,不足之处望指正,多谢。
思路
- top命令本身支持动态和静态输出的方式显示进程信息,也支持指定top n个pid,所以这个shell是基于此的。
- 在支持原始top命令的基础上,我们希望至少有两个功能:
1、监听指定的进程变化,根据pid监听,动态显示,不会输出到窗口,即只包含当时存在的pid,后续创建的pid是监听不到的;
2、监听指定进程名的变化,跟进程名关键字定时获取新的进程id集合,这个是静态显示,输出到窗口。
实现
#!/bin/bash
#Author:array7
#Create Time:2015-07-19 04:18:58
#Use: topx para1 para2
# para1: process name(Fuzzy support)
# para2: output times, mean re-run top command times
#
#Demo:
# demo1. topx java:equal to "top -p 123,321,111".These pids' process name contain "java".
# demo2. topx java 100: base demo 1,but output the newly result to screen for 100 times.
if test -z "$1"
then
top
else if test -z "$2"
then
pids=`pgrep $1 | tr "\\n" "," | sed 's/,$//'`
if test -z "$pids"
then
echo "Error:can not found pid of process \"${1}\""
exit 0
fi
top -p $pids
else
eval "top -d 3 -n $2 -b | egrep 'top - | PID | $1'"
fi
fi
demo
- 例子支持模糊进程名,比如:mysqld,可以使用mysq
- 找出线程名为java的当前已经存在的PID变化:
topx java
- 找出线程名为java所有PID的变化,包含新创建的PID,并输出100次:
topx java 100
版权声明:本文为博主原创文章,未经博主允许不得转载。
Linux 动态监听进程shell的更多相关文章
- oracle静态与动态监听
在运行lsnrctl命令的status时,常会看到如下返回值: 服务“test”包含1个例程. 例程"mydata",状态 UNKOWN,包含此服务的一个处理程序... 服务 ...
- IOS高级开发~开机启动&无限后台运行&监听进程
一般来说, IOS很少给App后台运行的权限. 仅有的方式就是 VoIP. IOS少有的为VoIP应用提供了后台socket连接,定期唤醒并且随开机启动的权限.而这些就是IOS上实现VoIP App的 ...
- 详解vuex结合localstorage动态监听storage的变化
这篇文章主要介绍了详解vuex结合localstorage动态监听storage的变化,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 需求:不同组件间共用同一数据,当一个 ...
- js动态监听dom变化
原生js 动态监听dom变化,根据不同的类型绑定不同的处理逻辑 // Firefox和Chrome早期版本中带有前缀 var MutationObserver = window.MutationO ...
- IOS开发~开机启动&无限后台运行&监听进程
非越狱情况下实现: 开机启动:App安装到IOS设备设备之后,无论App是否开启过,只要IOS设备重启,App就会随之启动: 无限后台运行:应用进入后台状态,可以无限后台运行,不被系统kill: 监听 ...
- ORACLE动态监听
动态监听的原理 pmon在数据库启动到mount或open时,动态从参数文件中读取service_names值.service_names可以为多值(可以有64个,其中包括两个系统的). servi ...
- Linux监听进程是否存在,并加入定时任务
前言 我们在linux主机上可能需要一直运行某一服务,如果关机后或者误杀,使得服务停止,从而影响日常的任务.比如一BI项目数据库的抽取,使用Taskctl调度,在每天固定时间进行数据的抽取,如果主机上 ...
- linux: 获取监听指定端口的进程PID
在 linux 下经常需要杀死(重启)监听某端口的进程, 因此就写了一个小脚本, 通过 ss 命令获取监听制定端口的进程 PID, 然后通过 kill 命令结束掉进程: #!/bin/sh # set ...
- Oracle静态监听和动态监听
一.静态注册 静态注册指实例启动时读取listener.ora配置文件,将实例和服务注册到监听程序.无论何时启动一个数据库,默认都有两条信息注册到监听器中:实例和服务.SID_LIST_LISTENE ...
随机推荐
- HTML5系列四(WebWorker、地理定位)
WebWorker简单应用 先从一个简单例子说起,计算数值加法 <script> var worker = new Worker('sumCalculate.js'); worker.on ...
- HTML5学习总结-10 Android 控件WebView显示网页
WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient 1)setWebClient: ...
- 深入理解css中position属性及z-index属性
深入理解css中position属性及z-index属性 在网页设计中,position属性的使用是非常重要的.有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难. position属性共 ...
- MySQL中的外键是什么、有什么作用
本文参加博文大赛,如果您满意的话麻烦点击这里给我投票原,查看原文点击这里.最近自学数据库MySQL,然后有个疑问,一直不得其解,查询了相关资料,最后还是没有解决. 我的疑问是 "使用外键约束 ...
- autofac 注入普通服务和WCF服务
using Autofac;using Autofac.Builder;using Autofac.Core; //实现Autofac扩展 public static AutofacRegisterW ...
- 将一个tabel加到另一个table
DataTable rate = GetRate(str_catchType,); dt.Merge(rate);//将两个table合并
- C# “配置系统未能初始化” 异常解决
使用App.config配置参数,读取参数出现错误 “System.Configuration.ConfigurationErrorsException”类型的未经处理的异常在 System.Conf ...
- log4j2 使用
转载自 Blog of 天外的星星: http://www.cnblogs.com/leo-lsw/p/log4j2tutorial.html Log4j 2的好处就不和大家说了,如果你搜了2,说明你 ...
- yii2中事务不能回滚的解决
$player1 = Player::findOne(1); $player1->nickname = '111'; $player2 = Player::findOne(2); $player ...
- gitingore
**/.DS_Store node_modules/ logs/*.log views/dir/*.tpl(视图文件后缀)