无法将信号发送到perl中的另一个进程

时间:2016-04-23 11:24:54

标签: linux perl cgi kill

我必须在cgi perl脚本中将sigusr2信号12发送到名为xyz的进程。我做了以下事情:

<?xml version="1.0" encoding="UTF-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#22ffffff" />
<item android:drawable="#00ffffff" />
</transition>

当我按下运行此命令的按钮时,它就会死亡。

如何向名为&#34; xyz&#34;的过程发送信号?在cgi perl脚本中。

1 个答案:

答案 0 :(得分:3)

您应该将错误消息扩展为$!:

my $pid = `pidof xyz`;
kill 12, $pid or die "could not kill $pid: $!";

$!包含最后一次系统调用错误:http://perldoc.perl.org/perlvar.html#%24ERRNO

您还应该检查是否找到了任何PID:

my $pid = `pidof xyz`;
die 'No PID found for xyz!' unless $pid;
kill 12, $pid or die "could not kill $pid: $!";

uid不匹配(如您帖子的评论中所述)可能是原因。您可以使用 ps 来检查:

my $pid = `pidof xyz`;
die 'No PID found for xyz!' unless $pid;
system "ps u $$ $pid";
kill 12, $pid or die "could not kill $pid: $!";

输出应如下所示:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 185388  5960 ?        Ss   08:31   0:01 /sbin/init splash
some      3159  0.0  0.0  27296  8836 pts/11   Ss   08:33   0:00 bash

USER 列的值对于两个进程(Perl进程和被杀死的进程)应该相同,否则您不允许发送任何信号(除非您的脚本以root身份运行,不建议这样做。