免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8342 | 回复: 22
打印 上一主题 下一主题

[系统管理] 请教自动杀掉长时间运行的进程 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-01 18:25 |只看该作者 |倒序浏览
问题: 我想自动杀死运行时间超过1800秒的unzip进程

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2013-11-01 19:18 |只看该作者
本帖最后由 关阴月飞 于 2013-11-02 00:20 编辑

回复 1# Auroracxy


提供一个思路吧:
#用ps查找出所有unzip进程:
  1. ps  -eo pid,etime,args |grep [u]nzip
复制代码
#使用awk把运行时间(etime)转换成秒数:大于1800的则输出进程pid
  1. awk 'BEGIN{t[1]=86400;t[2]=3600;t[3]=60;t[4]=1}{n=split($2,a,"-|:");for(i=1;i<=n;i++)s+=a[i]*t[i]}s>1800{print $1;s=0}'
复制代码

注:上面的这段awk代码逻辑上有问题,考虑不周,修改成如下
:在此多谢@yestreenstars提醒:
  1. awk 'BEGIN{split("1:60:3600:86400",t,":")}{n=split($2,a,"-|:");for(i=n;i;i--)s+=a[i]*t[n-i+1]}s>1800{print $1;s=0}'
复制代码
#把筛选出来pid 杀掉
  1. xargs kill -9
复制代码
凑一起就是:

  1. ps -eo pid,etime,args |grep [u]nzip |awk 'BEGIN{split("1:60:3600:86400",t,":")}{n=split($2,a,"-|:");for(i=n;i;i--)s+=a[i]*t[n-i+1]}s>1800{print $1;s=0}' |xargs kill -9
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
3 [报告]
发表于 2013-11-01 20:38 |只看该作者
回复 2# 关阴月飞
这计算进程运行时间的方法不对吧~

   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
4 [报告]
发表于 2013-11-01 20:43 |只看该作者
回复 3# yestreenstars


    天,时,分,秒  哪不对呀?

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
5 [报告]
发表于 2013-11-01 20:50 |只看该作者
本帖最后由 yestreenstars 于 2013-11-01 20:54 编辑

回复 4# 关阴月飞
你的awk里,s应该就是代表运行的时间(总秒数),下面是我测试的结果:
  1. [root@localhost ~]# ps -eo pid,etime,args | grep smbd
  2. 14036       05:44 smbd -D
  3. 14038       05:43 smbd -D
  4. 14100       00:01 grep smbd
  5. [root@localhost ~]# ps -eo pid,etime,args | grep smbd | awk 'BEGIN{t[1]=86400;t[2]=3600;t[3]=60;t[4]=1}{n=split($2,a,"-|:");for(i=1;i<=n;i++)s+=a[i]*t[i]}{print s;s=0}'
  6. 597600
  7. 594000
  8. 3600
  9. [root@localhost ~]#
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
6 [报告]
发表于 2013-11-01 21:01 |只看该作者
本帖最后由 关阴月飞 于 2013-11-01 21:12 编辑

回复 5# yestreenstars


    确实不对,有漏洞,应该反过来算,现在在外面,等会改一下

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2013-11-01 21:57 |只看该作者
  1. ps -eo pid,comm,lstart #-e选项作用为显示所有进程,-o选项作用为自定义格式,pid为进程号,comm为命令名,lstart为进程启动时间。
复制代码
  1. ps -eo pid,comm,lstart | awk '$2=="bash"' #指定要杀死的进程名,我这里以bash为例。
复制代码
  1. ps -eo pid,comm,lstart | awk '$2=="bash"' | awk '{"date -d \""$4" "$5" "$6" "$7"\" +%s" | getline t1;"date +%s" | getline t2;if(t2-t1>1800)print $1}'
  2. #将进程的启动时间转化为秒数,再将当前时间转化为秒数,然后用后者减去前者,再和楼主要求的1800秒比较,如果大于,就输出该进程的进程号。
复制代码
  1. ps -eo pid,comm,lstart | awk '$2=="bash"' | awk '{"date -d \""$4" "$5" "$6" "$7"\" +%s" | getline t1;"date +%s" | getline t2;if(t2-t1>1800)print $1}' | xargs kill -9
  2. #最后再借助xargs,利用kill命令杀死进程。
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
8 [报告]
发表于 2013-11-02 00:15 |只看该作者
回复 5# yestreenstars

改成这样就没问题了,多谢测试提醒:
  1. awk 'BEGIN{split("1:60:3600:86400",t,":")}{n=split($2,a,"-|:");for(i=n;i;i--)s+=a[i]*t[n-i+1]}s>1800{print $1;s=0}'
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
9 [报告]
发表于 2013-11-02 00:20 |只看该作者
本帖最后由 yestreenstars 于 2013-11-02 00:20 编辑

回复 8# 关阴月飞
貌似还是有点问题啊~
  1. [root@localhost ~]#  ps -eo pid,etime,args | grep bash
  2. 1261  1-10:16:49 -bash
  3. 9808    02:45:18 -bash
  4. 10197       00:01 grep bash
  5. [root@localhost ~]# ps -eo pid,etime,args | grep bash | awk 'BEGIN{t[1]=86400;t[2]=3600;t[3]=60;t[4]=1}{n=split($2,a,"-|:");for(i=1;i<=n;i++)s+=a[i]*t[i]}{print s;s=0}'
  6. 123410
  7. 335940
  8. 0
  9. [root@localhost ~]# ps -eo pid,comm,lstart | awk '$2=="bash"' | awk '{"date -d \""$4" "$5" "$6" "$7"\" +%s" | getline t1;"date +%s" | getline t2;print t2-t1}'
  10. 123421
  11. 9930
  12. [root@localhost ~]#
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
10 [报告]
发表于 2013-11-02 00:25 |只看该作者
回复 9# yestreenstars


    目测你用的还是我原来的旧代码呀,搞错了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP