[已解决]如何在PERL程序中杀掉进程再启动进程

[已解决]如何在PERL程序中杀掉进程再启动进程

#!/usr/bin/perl
use Proc:rocessTable;
$squidprecess=new Proc:rocessTable;
print "Find has been allowed to visit the address?\n";
$allowurl=<STDIN>;
open FILE, "/root/allow_url" or die "Can not open this document.\n";
      while (<FILE>{
        if ($_ eq $allowurl){
        print "The address exist and stop the program.\n";
        last;
}
elsif ($_ ne $allowurl){
        close(FILE);
        open FILE ,">>/root/allow_url";
        print FILE "$allowurl";
}
}
foreach $p (@{$squidprecess->table})
{
# note that we will also kill "squid" and all processes
kill 9, $p->pid if $p->cmndline =~ 'squid';
}
system ("/var/squid/sbin/squid -f /var/squid/etc/squid.conf"


这是我所写的一个PERL程序,但是在最后无法做到先杀掉进程再重启该进程,有人可以告诉我怎样做呢.
也曾经试过
直接在最后改成
kill(9,squid);
exit ("/var/squid/sbin/squid -f /var/squid/etc/squid.conf";
但只要有kill(9,squid);就无法作文件的写操作.
已经想了好久,有没有哪位高人能告诉一下我该怎样做呢?

之前一直在准备考成大,就没怎么理会,无奈不知是我描述有问题还是大家都觉得很简单,放上N久都没人理我。
今天我终于找到问题出在哪里了,不管怎样,非常高兴
#!/usr/bin/perl
use Proc:rocessTable;
$t=new Proc:rocessTable;
print "Find has been allowed to visit the address?\n";
$allowurl=<STDIN>;
open FILE, "/var/squid/etc/acl/allow_url" or die "Can not open this document.\n";
      while (<FILE>{
        if ($_ eq $allowurl){
        print "The address exist and stop the program.\n";
        last;
}
#else {
}
        close(FILE);
        open FILE ,">>/var/squid/etc/acl/allow_url";
        print FILE "$allowurl";
foreach $p (@{$t->table})
{
# note that we will also kill "squid" and all processes
if ($p->cmndline =~ 'squid'){
        $p->kill(9);
}
}
system ("/var/squid/sbin/squid -f /var/squid/etc/squid.conf"

第一个原因属于低级错误,因为我这个PERL程序的名字就叫做squidap,结果杀掉进程的时候顺便把自己也杀掉了,我还研究了那么久,第二个原因请看楼上,kill 9, $p->pid if $p->cmndline =~ 'squid';是因为我是先杀掉再找SQUID。


现在已经能够重启进程,但是还不够完善,我会完善他的。
我觉得你不应该用$t->cmndline 去匹配squid,而是用fname,因为*.pl脚本的进程fname通常都是perl或者perl5.*