杀死长期运行的Fastcgi进程

mbe*_*ins 6 perl fastcgi dancer

我有一个Perl Dancer Web应用程序,它使用Apache2的mod_fastcgi服务方法.应用程序必须接受上传的文件.当用户上传文件并按下停止按钮时,fastcgi进程挂起,以100%运行,直到我手动终止进程.

是否有任何设置可以自动杀死像这样挂起的进程?有没有办法自动杀死已经运行了一段时间的fastcgi进程?

mbe*_*ins 0

由于我感兴趣的函数不是 mod_fastcgi 的选项,而且我似乎找不到要包装在 Time::Out 中以终止进程的代码部分。我想我会分享我的 hacked ttogether 解决方案。

我搜索了一个 linux 命令来执行此操作,但killall 不起作用(它不会专门找到运行该服务器实例的 perl 命令)并且 pkill 也不起作用(无法指定进程的年龄)杀)。

因此,我编写了一个简短的 Perl 脚本,以 root 身份运行,以终止具有正确名称和舞者 mod_fastcgi 服务器实例年龄的作业:

#!/usr/bin/perl -w

use Proc::ProcessTable;

$t = new Proc::ProcessTable( 'cache_ttys' => 1 );  

foreach $p ( @{$t->table} ){
    if ($p->cmndline =~ /perl.*dispatch.fcgi/) {
        my $run_time_min = $p->time/(1000000*60);
        if ($run_time_min >= 15) {
            # print "Found this job to kill: ". $p->pid . $p->cmndline."\n". $run_time_min . "\n";
            kill 'KILL', $p->pid;
        }   
    }   
}
Run Code Online (Sandbox Code Playgroud)