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 ...
随机推荐
- Ubuntu学习总结-08 Ubuntu运行Shell脚本报 shell /bin/bash^M: bad interpreter错误问题解决
错误原因之一很有可能是运行的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MA ...
- dig的用法
Dig是linux中的域名解析工具,功能比nslookup强很多,使用也很方便,不用象nslookup总是set不停. Dig是domain information groper的缩写,知道了来源想必 ...
- assert()函数用法总结
assert()函数用法总结 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> ...
- Winsock 入门 Echo 示例
#include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32") /* Win ...
- OpenGL教程
http://www.opengl-tutorial.org/ http://www.lighthouse3d.com/ http://www.arcsynthesis.org/gltut/ http ...
- CSS3 让图片镜像对称
1.HTML代码 <!DOCTYPE html> <html> <head> <title>test</title> </head&g ...
- EF批量插入 扩展
https://efbulkinsert.codeplex.com/ https://github.com/loresoft/EntityFramework.Extended
- 修改wampserver 默认localhost 和phpmyadmin 打开链接
在wamp上 左键打开localhost 自定义端口的话 或者其他网址 需要以下修改(同样访问phpmyadmin修改也是这个地方) 修改文件路径 D:\wamp\wampmanager.tpl 搜索 ...
- OC-改错题
1,类方法中不能访问成员变量 2,id后不能加*(因为id相当于NSObject *) 3,id类型的变量不能用点语法 4,类对象只能调用类方法,不能调用对象方法 .description #impo ...
- gitingore
**/.DS_Store node_modules/ logs/*.log views/dir/*.tpl(视图文件后缀)