来自在apache下运行的perl脚本的中断(SIGINT)perl脚本

时间:2014-06-28 11:37:29

标签: apache perl signals interrupt

我有一个以root身份运行的perl脚本,它监视串行设备并向其发送命令。在apache下,我有另一个perl脚本,它显示了一个用于控制root' root的#i;脚本。

我试图通过sigint和sigusr1来中断来自gui perl脚本的root perl脚本但是不允许进行操作,可能是因为一个是root而另一个不是。

我基本上希望gui能够告诉控制根脚本将一些命令传递给串行设备。

如果我以root身份从cmd行运行gui脚本,它可以成功发出根脚本信号

我不确定从何处开始,有关在不以root身份运行时中断根脚本的方法的建议?呼叫分离"信号"脚本如图所示:

     @cmds = ("perl /var/www/signal.cgi", "$perlSerialPID", "test");
     if (0 == system(@cmds)) {
         # code if the command runs ok
         print "system call ok: $?";
     } else {
        # code if the command fails
        print "not ok $?";
     }
     # try backticks
     $output = `perl /var/www/signal.cgi $perlSerialPID test`;
     print "<br>:::$output";

signal.cgi:

#!/usr/bin/perl

$pid = $ARGV[0];
$type = $ARGV[1];

if($type eq "test"){
 if(kill 0, $pid) {
   print "perl-serial $pid running!";
 }else{
   print "perl-serial $pid gone $!";
 }
}elsif($type eq "USR1"){
  if(kill USR1, $pid) {
   print "perl-serial interrupted";
  }else{
   print "perl-serial interrupt failed $!";
  }
}else{
  print "FAILED";
} 

1 个答案:

答案 0 :(得分:2)

  1. 使用named pipes进行IPC。

    缺点是您必须改进主脚本以从命名管道读取事件驱动过程。

  2. 概念与上述类似(具有相同的缺点),但使用sockets进行沟通。

  3. 创建一个单独的“发送信号”脚本,该脚本通过系统调用从您的UI调用,并创建新的脚本SUID并由root拥有 - 在这种情况下,它将以root的权限执行。

    下行:对于安全滥用行为来说,成熟非常谨慎。