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

Cannot send signal to another process in perl

我必须将 sigusr2 信号编号 12 发送到 cgi perl 脚本中名为 xyz 的进程。我执行以下操作:

my $pid = `pidof xyz`;

kill 12, $pid or die "could not kill: $pid";

当我按下这个命令 运行 上的按钮时它就死了。

如何在 cgi perl 脚本中向名为 "xyz" 的进程发送信号。

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

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 不匹配(如对 post 的评论中所述)可能是原因。您可以使用 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 身份运行,否则不推荐这样做)。