怎样写一个脚本来判断那些进程已经死去,并KILL掉?

怎样写一个脚本来判断那些进程已经死去,并KILL掉?

怎样来写脚本来判断和杀进程呢?

$username =`whoami`;
chomp($username);
@aa = `ps -ef|grep $username|grep -v grep |grep -v ps|cut -c8-14`;
for(@aa){
  chomp;
  next unless /^\d+$/;
  unless(  kill 0 =>;$_){
      kill 9 =>; $_;
  }
}

-c8-14可能隨著系統不同..
而且上面我修改後的好處是只會刪除自己的process id
不會跟其他人的有關係..
另外如果是root要做..把grep $username拿掉就可以了..

因為kill -0 $pid只對..自己的process有用..其他人的沒用..
ps aux,ps -ef(各种平台参数有些不同)
然后找stat字段,Z表示僵死状态。

打印僵死进程的pid。
ps -ef|awk '{if($3=="Z"print $1}'
ps -ef|awk '{if($3=="Z"print "kill -9 "$1}'|sh

小心使用!可以先把|sh去掉,看看打印结果。
kill -0 $pid
測試process是不是還有在processing...
true..有
false..沒有

ps -ef 應該大多數OS..都有支援..
看样子要找些书看看才行呀,哪里有没有PERL的书籍可下载
这些是shell的知识,先看看shell吧, :)


QUOTE:
原帖由 "apile" 发表:

$username =`whoami`;
chomp($username);
@aa = `ps -ef|grep $username|grep -v grep |grep -v ps|cut -c8-14`;
for(@aa){
  chomp;
  next unless /^\d+$/;
  unless(  kill 0 =>;$_){
      kill 9 ..........

我收!!~~

阿里嘎多,收了


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl

foreach (@ARGV) {
        $process{$_} = 0;
}
open STATUS, "ps -e |";
while (<STATUS>) {
        $_ =~ s/^\s+//;
        print "$_\n";
        ($pid, $name) = (split /\s+/)[0,3];
        if (defined($process{$name})) {
                print "kill process $name, process id $pid ...\n";
                $cnt = kill 9, $pid;
                printf STDERR "$pid: $!\n" if !$cnt;
        }
}
close STATUS;