LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1103|回复: 10

如何用一行命令杀死含某一字符串的所有进程

[复制链接]
发表于 2003-12-21 10:24:24 | 显示全部楼层 |阅读模式
比如有很多的进程含有同一字符串,如何写一个小脚本(越短越好,应该一句话就可以搞
掂,可是我不会写  )。
比如脚本名叫mykill,要求后面带一个参数,为要查的字符串
如下面的用法:
#./mykill filter-string

那么凡是含有filter-string串的进程都被杀死

请指教!
发表于 2003-12-21 10:39:01 | 显示全部楼层
什么叫"有很多的进程含有同一字符串"?
 楼主| 发表于 2003-12-21 10:53:17 | 显示全部楼层
比如说:以下的进程列表中,有不少是含有fvwm字符串的
462 tty1     00:00:01 fvwm
463 tty1     00:00:00 FvwmButtons
464 tty1     00:00:00 FvwmButtons
465 tty1     00:00:00 FvwmAuto
466 tty1     00:00:00 FvwmAnimate
467 tty1     00:00:00 fcitx
469 tty1     00:00:00 FvwmButtons
470 tty1     00:00:00 xclock
471 tty1     00:00:00 FvwmPager
发表于 2003-12-21 11:08:49 | 显示全部楼层
看看ps的代码可能有用
发表于 2003-12-21 11:57:46 | 显示全部楼层

pkill试试

rt
发表于 2003-12-21 12:07:31 | 显示全部楼层
虽然没试过,但perl绝对可以完成,你可以试试
可以先调用系统命令PS来截获输出,然后再用模式匹配来找到对应的进程,然后再调用KILL杀掉
 楼主| 发表于 2003-12-21 14:27:29 | 显示全部楼层
yeah, pkill is perfect!
发表于 2003-12-21 17:49:50 | 显示全部楼层
看看这个行不:

  1. #! /usr/bin/perl -w

  2. die "require a arguments (a string)" if @ARGV != 1;

  3. foreach (`ps ax | grep $ARGV[0]`){
  4.   $i = (split)[0];
  5.   system("kill -9 $i") if defined $i;
  6. }
复制代码
 楼主| 发表于 2003-12-21 21:00:21 | 显示全部楼层
在linux下这个可以运行

  1. #!/bin/bash
  2. kill -9 `ps -A | grep $1 | awk '{print $1}'`
复制代码


在BSD下我想以下可以吧

  1. #!/bin/bash
  2. kill -9 `ps ax | grep $1 | awk '{print $1}'`
复制代码
发表于 2003-12-22 13:14:35 | 显示全部楼层
bsd下也可以运行linux那个,呵呵
不过我一般用ps ax|grep ...|awk '{print "kill -9 "$1}'
看看有没错。如果没错再在后面加|sh来实际删除
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表