shell写了个监测进程的shell脚本 kill进程id,不过有个bug

这个脚本怎么写,linux开机后,判断某个目录下是否有个shell脚本,有执行,没有不执行。_百度知道查看:16049|回复:6
初级工程师
根据我个人的理解, 所谓的多进程 只不过是将多个任务放到后台执行而已,很多人都用到过,所以现在讲的主要是控制,而不是实现。
先看一个小shell:
看执行结果:
很明显是8s
=============================
这种不占处理器却有很耗时的进程,我们可以通过一种后台运行的方式
来达到节约时间的目的。看如下改进:
用“{}”将主执行程序变为一个块,用&放入后台,四次执行全部放入后台后,我们
需要用一个wait指令,等待所有后台进程执行结束,
不然 系统是不会等待的,直接继续执行后续指令,知道整个程序结束。
可以看到,时间已经大大缩短了!
============================
以上实验虽然达到了多线程并发的目的,但有一个缺陷,不能控制
运行在后台的进程数。
为了控制进程,我们引入了管道 和文件操作符。
无名管道: 就是我们经常使用的 例如: cat text | grep &abc&
& && && && && && & 那个“|”就是管道,只不过是无名的,可以直接作为两个进程的数据通道
有名管道: mkfilo&&可以创建一个管道文件 ,例如: mkfifo fifo_file
管道有一个特点,如果管道中没有数据,那么取管道数据的操作就会停滞,直到
管道内进入数据,然后读出后才会终止这一操作,同理,写入管道的操作
如果没有读取操作,这一个动作也会停滞。
当我们试图用echo想管道文件中写入数据时,由于没有任何进程在对它做读取操作,所以
它会一直停留在那里等待读取操作,此时我们在另一终端上用cat指令做读取操作
你会发现读取操作一旦执行,写入操作就可以顺利完成了,同理,先做读取操作也是一样的:
由于没有管道内没有数据,所以读取操作一直滞留在那里等待写入的数据
一旦有了写入的数据,读取操作立刻顺利完成
以上实验,看以看到,仅仅一个管道文件似乎很难实现 我们的目的(控制后台线程数),
所以 接下来介绍 文件操作符,这里只做简单的介绍,如果不熟悉的可以自行查阅资料。
系统运行起始,就相应设备自动绑定到了 三个文件操作符& &分别为 0 1 2 对应 stdin ,stdout, stderr 。
在&&/proc/self/fd 中 可以看到 这三个三个对应文件
输出到这三个文件的内容都会显示出来。只是因为显示器作为最常用的输出设备而被绑定。
我们可以exec 指令自行定义、绑定文件操作符
文件操作符一般从3-(n-1)都可以随便使用
此处的n 为 ulimit -n 的定义值得
可以看到 我的 n值为1024 ,所以文件操作符只能使用 0-1023,可自行定义的 就只能是 3-1023 了。
直接上代码,然后根据代码分析每行代码的含义:
(17.25 KB)
第3行:& && && &接受信号 2 (ctrl +C)做的操作
& && && && && && && & exec 1000&&-和exec 1000&&- 是关闭fd1000的意思
& && && && && && && & 我们生成做绑定时 可以用 exec 1000&&testfifo 来实现,但关闭时必须分开来写
& && && && && && && & & 读的绑定,& 标识写的绑定&&&& 则标识 对文件描述符 1000的所有操作等同于对管道文件
& && && && && && && & testfifo的操作。
第5-7行:& &  分别为 创建管道文件,文件操作符绑定,删除管道文件
    & &   可能会有疑问,为什么不能直接使用管道文件呢? 
    & &&& 事实上,这并非多此一举,刚才已经说明了管道文件的一个重要特性了,那就是读写必须同时存在
    & &&& 缺少某一种操作,另一种操作就是滞留,而绑定文件操作符 正好解决了这个问题。
    & && & (至于为什么,我还没研究明白,有知道的 还请告知,谢谢)
第9-12 行:& & 对文件操作符进行写入操作。 通过一个for循环写入10个空行,这个10就是我们要定义的后台线程数量。
& && && && && && && & 为什么写入空行而不是10个字符呢 ?
& && && && && && && &&&这是因为,管道文件的读取 是以行为单位的。
&&当我们试图用 read 读取管道中的一个字符时,结果是不成功的,而刚才我们已经证实使用cat是可以读取的。
第17-24行:&&这里假定我们有100个任务,我们要实现的时 ,保证后台只有10个进程在同步运行 。
& && && && && && && &read -u1000 的作用是:读取一次管道中的一行,在这儿就是读取一个空行。
& && && && && && && &减少操作附中的一个空行之后,执行一次任务(当然是放到后台执行),需要注意的是,这个任务在后台执行结束以后
& && && && && && && &会向文件操作符中写入一个空行,这就是重点所在,如果我们不在某种情况某种时刻向操作符中写入空行,那么结果就是:
& && && && && && && &在后台放入10个任务之后,由于操作符中没有可读取的空行,导致&&read -u1000 这儿 始终停顿。
后边的 就不用解释了,贴下执行结果:
(39.49 KB)
每次的停顿中都能看到&&只有10个进程在运行
一共耗时50s&&
一共100个任务,每次10个 ,每个5s 正好50s
上边的结果图之所以这么有规律,这是因为我们所执行的100个任务耗时都是相同的,
比如,系统将第一批10个任务放入后台的过程所消耗的时间 几乎可以忽略不计,也就是说
这10个任务几乎可以任务是同时运行,当然也就可以认为是同时结束了,而按照刚才的分析,
一个任务结束时就会向文件描述符写入空行,既然是同时结束的,那么肯定是同时写入的空行,
所以下一批任务又几乎同时运行,如此循环下去的。
实际应用时,肯定不是这个样子的,比如,第一个放到后台执行的任务,是最耗时间的,
那他肯定就会是最后一个执行完毕。
所以,实际上来说,只要有一个任务完成,那么下一个任务就可以被放到后台并发执行了。
nice!很有想法,学习了
您好,请问您在51CTO中发的shell脚本的多进程的帖子中,为什么我执行的时候会报错误mkfifo: cannot create fifo `testfifo': Operation not permitted,请大侠指教,本人菜鸟一枚,改成管理员权限执行也不对,伤感
哥,read -n 1 fifofile 不是读管道文件中的一行吧?
为什么不这样写呢,
#!/bin/bash
declare -i k=0
start=$(date +%s)
for ((i=0;i&100;i++)
& && & echo success&$i&; sleep 3
& & if [ $k -eq 10 ]
& && & then
& && & wait
& && &done
& && &wait
& & end=$(date +%s)
& & echo &timeused:$(expr $start-$end)&
引用:原帖由 zhonghousan 于
20:35 发表
为什么不这样写呢,
#!/bin/bash
declare -i k=0
start=$(date +%s)
for ((i=0;i #!/bin/bash
declare -i k=0
start=$(date +%s)
for ((i=0;i&100;i++))
& && & echo success&$i&; sleep 5
& & if [ $k -eq 10 ]
& && & then
& && & wait
& && &&&echo &k=$k&
& && && &echo &process=`ps -ef|grep /tmp/tes|wc -l`&
& && &done
& && &wait
& & end=$(date +%s)
& & echo &timeused: `expr $end - $start `&
这个没有实现并发,而且相当于全部命令放后台执行。你可以用上面的脚本看 进程数量,脚本保存在/tmp/tes 里面。免费写shell脚本,和发布自己用的脚本!【长期有效!】【更新】 - 查看主题 & Ubuntu中文论坛
&[ 54 篇帖子 ]&
&文章标题 : 免费写shell脚本,和发布自己用的脚本!【长期有效!】【更新】发表于 :
18:28帖子: 240
大家好,我最近刚把《高级Bash脚本编程指南》学习完,自己写了很多的脚本,但是因为现在忙于考研,因此只有晚上10:00以后有时间来帮忙写shell脚本。
因为学习的时间长了,晚上回到宿舍后看一会新闻就没什么事了,为了不使自己的shell变成能力生疏,于是决定利用晚上这一小时来帮助别人人写脚本,顺便锻炼一下自己 P.S.本人不保证所有人的要求都会一一实现,但是只要我答应你了,就一定会写出“没有BUG”(尽自己的最大能力!)的实现你所要求全部功能的脚本!欢迎来踩
===============================================================1.转换当前目录下面的mp4文件为同名的音频文件(无损抽取原音频)地址:2楼2.移动 /var/cache/apt/archives 目录下的所有deb缓存包到指定目录,并将该目录下的的包替换成备份目录的符号链接;地址:32楼
_________________720P电影,无损音乐,Linux教程资料:
22:50,总共编辑了 4 次
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
18:28帖子: 240
转换当前目录下面的mp4文件为同名的音频文件(无损抽取原音频)代码:#!/bin/bash# 本脚本用于将当前目录下的所有.mp4文件转换为.aac格式的音频文件cd -- $(dirname $0)IFS=''set -- $(ls *.mp4)mp4name=&$1&while [ -n &$mp4name& ]; do& &mp4name=$1& &echo &$mp4name&& &pre_mp4name=${mp4name%.*}& &ffmpeg -i &${mp4name}& -vn -acodec copy -y &${pre_mp4name}.aac& 2& /dev/null& &shiftdone
_________________720P电影,无损音乐,Linux教程资料:
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
8:48帖子: 26297地址: 东海硇州,一双管钥。
系统: Fundu i64
支持一个,估计楼主以后有得忙了,你们家妹子没意见吧。
_________________◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。?执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
2:42帖子: 308
系统: Ubuntu 12.04LTS
帮我写个输入单词出来意思的脚本,谢谢
_________________Ubuntu 12.04 LTSlaptop:Acer 4750G CPU:I5-2410内存:2+2G 硬盘:500+750
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
8:48帖子: 26297地址: 东海硇州,一双管钥。
系统: Fundu i64
最近想统计一下农历的信息,只是不清楚不知道的数据怎么采集,不知楼主有什么办法抓取这些数据。
目前要求如下:找出每年的立春日所在的公历日期。每年春节所在的公历月份及日期。当年的闰月月份和大小和十二个非闰月的大小。当年的二十四节气的分布情况。由于要求稍微有点高,假如楼主觉得有难度的话,那就算了吧,我也不勉强。
不过楼主那么积极,还是要先说句谢谢了。
_________________◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。?执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
22:54帖子: 383
送出感谢: 0 次
接收感谢: 0 次
synclient VertEdgeScroll=1 HorizEdgeScroll=1开机启动 谢谢
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
18:28帖子: 240
ceclinux 写道:帮我写个输入单词出来意思的脚本,谢谢 呵呵,你可以使用 stardict ,脚本多麻烦?我记得还有个gnome-terminal 的ppa,可以在命令行里面进行google翻译
_________________720P电影,无损音乐,Linux教程资料:
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
18:28帖子: 240
瓦特1 写道:synclient VertEdgeScroll=1 HorizEdgeScroll=1开机启动 谢谢1.使用 SYStem V机制的启动项,或者是Ubuntu自己的upstart机制,详见/etc/rc目录里面的文件,但是要注意启动的先后顺序。2.使用“启动应用程序”,自己输入命令开机即可启动。3.写入到 ~/.profile文件即可我现在还没有研究到启动机制的那一部分,不过看你的问题这样应该能解决!
_________________720P电影,无损音乐,Linux教程资料:
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
18:28帖子: 240
YeLee 写道:最近想统计一下农历的信息,只是不清楚不知道的数据怎么采集,不知楼主有什么办法抓取这些数据。
目前要求如下:找出每年的立春日所在的公历日期。每年春节所在的公历月份及日期。当年的闰月月份和大小和十二个非闰月的大小。当年的二十四节气的分布情况。由于要求稍微有点高,假如楼主觉得有难度的话,那就算了吧,我也不勉强。
不过楼主那么积极,还是要先说句谢谢了。 我能说是巧合吗?这几天刚好在研究论坛里那个C语言版本的农历,和学习python,恩,你这个活我接了。不过这个活可能时间比较长,因为我想做一个完美无缺的农历软件,不会想麒麟里面的那个,功能比较少。我的想法是做一个indicator,就好像天气插件一样,可以看到近几天的农历简介,点击即可出现详细信息。可以自主查询农历。不过最完美的莫过于和 时间指示器 合并,恩……容我这几天自己想想!
_________________720P电影,无损音乐,Linux教程资料:
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
8:48帖子: 26297地址: 东海硇州,一双管钥。
系统: Fundu i64
lxf1992521 写道:我能说是巧合吗?这几天刚好在研究论坛里那个C语言版本的农历,和学习python,恩,你这个活我接了。不过这个活可能时间比较长,因为我想做一个完美无缺的农历软件,不会想麒麟里面的那个,功能比较少。我的想法是做一个indicator,就好像天气插件一样,可以看到近几天的农历简介,点击即可出现详细信息。可以自主查询农历。不过最完美的莫过于和 时间指示器 合并,恩……容我这几天自己想想!之前也弄过天气这部分,记得中国天气网提供了一大堆的接口哦,解析起来容易多了。
_________________◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。?执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
16:23帖子: 3850
送出感谢: 0 次
瓦特1 写道:synclient VertEdgeScroll=1 HorizEdgeScroll=1开机启动 谢谢触摸板的滚动啊……这个有专门的配置文件的……
_________________#include &stdio.h&void main(){
printf(&I miss you.\n&);}
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
22:54帖子: 383
送出感谢: 0 次
接收感谢: 0 次
onlylove 写道:瓦特1 写道:synclient VertEdgeScroll=1 HorizEdgeScroll=1开机启动 谢谢触摸板的滚动啊……这个有专门的配置文件的…… ~/.profile没效在.bashrc加synclient VertEdgeScroll=1 HorizEdgeScroll=1重启后要启动终端才有效我是13.10没etc/x11/xorg.conf配置文件在那里删了办公和游戏 ,启动应用程序 启动不了 不知道有没有关联
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
16:23帖子: 3850
送出感谢: 0 次
瓦特1 写道:onlylove 写道:瓦特1 写道:synclient VertEdgeScroll=1 HorizEdgeScroll=1开机启动 谢谢触摸板的滚动啊……这个有专门的配置文件的…… ~/.profile没效在.bashrc加synclient VertEdgeScroll=1 HorizEdgeScroll=1重启后要启动终端才有效我是13.10没etc/x11/xorg.conf配置文件在那里删了办公和游戏 ,启动应用程序 启动不了 不知道有没有关联还真不在/etc/X11/xorg.conf里面……印象里面是/usr/share或者别的目录里
_________________#include &stdio.h&void main(){
printf(&I miss you.\n&);}
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
22:12帖子: 5347地址: 江苏南京
系统: OSX 10.9 + Ub 1304
送出感谢: 0 次
lxf1992521 写道:YeLee 写道:最近想统计一下农历的信息,只是不清楚不知道的数据怎么采集,不知楼主有什么办法抓取这些数据。
目前要求如下:找出每年的立春日所在的公历日期。每年春节所在的公历月份及日期。当年的闰月月份和大小和十二个非闰月的大小。当年的二十四节气的分布情况。由于要求稍微有点高,假如楼主觉得有难度的话,那就算了吧,我也不勉强。
不过楼主那么积极,还是要先说句谢谢了。 我能说是巧合吗?这几天刚好在研究论坛里那个C语言版本的农历,和学习python,恩,你这个活我接了。不过这个活可能时间比较长,因为我想做一个完美无缺的农历软件,不会想麒麟里面的那个,功能比较少。我的想法是做一个indicator,就好像天气插件一样,可以看到近几天的农历简介,点击即可出现详细信息。可以自主查询农历。不过最完美的莫过于和 时间指示器 合并,恩……容我这几天自己想想!给你个截图,帮你整理一下思路农历的算法是公开的附件:
下午9.52.23.png [ 413 KiB | 被浏览 6413 次 ]
_________________佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;特此声明!有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。欢迎来我的
_________________
评价:&3.85%&
&文章标题 : Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】发表于 :
22:12帖子: 5347地址: 江苏南京
系统: OSX 10.9 + Ub 1304
送出感谢: 0 次
上面这个图截图的时候少了鼠标,鼠标指向日期的时候显示农历的信息比较详细
_________________佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;特此声明!有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。欢迎来我的
显示帖子 : 全部帖子1天7天2周1个月3个月6个月1年&排序 作者发表时间文章标题 升序降序&
&[ 54 篇帖子 ]&
正在浏览此版面的用户:没有注册用户 和 2 位游客
您 不能 在这个版面发表主题您 不能 在这个版面回复主题您 不能 在这个版面编辑帖子您 不能 在这个版面删除帖子您 不能 在这个版面提交附件
选择一个版面
------------------
公告/注意事项
& &新闻和通知
& &校园社团支持
& && &华东校区
& && &华南校区
& && &华北校区
& && &华中校区
& && &东北校区
& && &西北校区
& && &港澳台校区
& && &国外校区
& &软件推荐
& &非常任务
系统安装区
& &教学和常见问答
& && &课堂教学和培训
& &初学者园地 - 16.10 - Yakkety Yak
& &系统安装和升级
& && &新立得和软件源
& && &Wubi安装讨论
& &启动和引导
& &网卡问题以及网络和拨号
& && &校园网拨号
& &笔记本、UMPC支持
& &手机和平板
& && &Ubuntu移动应用开发
& &常用硬件支持
& &系统架构支持
配置美化区
& &字体美化和中文支持
& && &个人配置文件存放点
& &桌面特效
& &窗口管理器
& &屏幕抓图
& &办公、图像、机械电子设计等
& && &Vim和Emacs
& &因特网相关软件
& &影音多媒体
& &Wine及其分支
& &游戏和游戏模拟器
& &虚拟机和虚拟化
& &其它类软件
& &开源模板库
服务器管理
& &服务器基础应用
& &数据库管理
& &服务器维护和硬件相关
& &Ubuntu VPS
参与Ubuntu开发
& &软件和文档翻译
& &编译或打包
& &Ubuntu错误报告
程序设计区
& &Shell脚本
& &GTK+和QT
& &软件/网站开发
& && &Python/Php/Perl
& && &C/C++/Java
& &内核及嵌入式开发
& &开源小工具
& &Ubuntu 17.04
& &Ubuntu 16.04 LTS
& &Ubuntu 14.04 LTS
& &Ubuntu 12.04 LTS
& &Ubuntu 10.04 LTS
& &老旧版本支持
& && &Ubuntu 15.10
& && &Ubuntu 15.04
& && &Ubuntu 14.10
衍生发行版
& &Ubuntu GNOME
& &Kubuntu
& &Xubuntu & Lubuntu
& &Ubuntu中文衍生版
& && &UbuntuKylin
& &Ubuntu国外衍生版
& && &Mint
& &Ubuntu衍生版制作
& &其它类Unix OS发行版
& && &Arch发行版
& && &Debian发行版
& && &OpenSUSE发行版
& && &Deepin
& &深度PK版
& &Ubuntu故事和感慨
& &Full Circle开源杂志
分享交流区
& &同城交流
& &线下活动专版
& &Ubuntu宣传推广
& &论坛管理
& && && &Ubuntu中文网上商店Shell脚本实现监视指定进程的运行状态-shell_脚本专栏-脚本宝典
页面导航: >
> Shell脚本实现监视指定进程的运行状态
Shell脚本实现监视指定进程的运行状态
这篇文章主要介绍了Shell脚本实现监视指定进程的运行状态,本文直接给出脚本代码,需要的朋友可以参考下
在之前的博客中,曾经写了自动化测试程序的实现方法,现在开发者需要知道被测试的进程(在此指运行在LINUX上的主进程的)在异常退出之前的进程的运行状态,例如内存的使用率、CPU的使用率等。
现用实现指定进程的运行状态。直接上代码。
echo "`date`"
echo "Start $0---------"
#每十秒监视一下
#取得指定进程名为mainAPP,内存的使用率,进程运行状态,进程名称
eval $(ps | grep "mainApp" | grep -v grep | awk {'printf("memInfo=%s;myStatus=%s;pName=%s",$3,$4,$5)'})
echo $pName $myStatus $memInfo
testPrg=""
while [ -n "$pName" -a "$myStatus" != "Z" ]
echo "----------`date`---------------------"
echo $pName $myStatus $memInfo
sleep $sec
####You must initialize them again!!!!!
myStatus=""
memInfo=""
eval $(ps | grep "mainApp" | grep -v grep | awk {'printf("memInfo=%s;myStatus=%s;pName=%s",$3,$4,$5)'})
testPrg=`ps | grep "MyTester" | grep -v grep | awk '{print $0}'`
if [ -z "$testPrg" ]; then
##注意一定要再次初始化为空
testPrg=""
echo "End $0---($pName,$myStatus,$testPrg)-------------------"
if [ -z "$pName" ]; then
###发现测被测试程序异常退出后,停止测试程序
killall MyTester
echo "stop TestProgram MyTester"
echo "`date`"
echo "---------------Current Status------------------"
ps | grep -E "mainApp|SubApp" | grep -v grep
本文链接:
最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具求帮忙写一个shell脚本,监控进程的。_百度知道

我要回帖

更多关于 shell脚本监控进程 的文章

 

随机推荐