1
我必须发送一个sigusr2信号编号12到一个名为xyz的进程在cgi perl脚本中。我执行以下操作:无法发送信号到另一个进程perl
my $pid = `pidof xyz`;
kill 12, $pid or die "could not kill: $pid";
当我按下运行此命令的按钮时,它会死亡。
如何将信号发送到cgi perl脚本中名为“xyz”的进程。
我必须发送一个sigusr2信号编号12到一个名为xyz的进程在cgi perl脚本中。我执行以下操作:无法发送信号到另一个进程perl
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不匹配可能是原因。你可以使用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身份运行,这是不推荐的)。
其他进程是否运行相同的用户ID?只有root可以发送信号给不同的用户进程。 – Barmar
尝试在错误消息中包含'$!',以便查看错误原因。 – Barmar
@Barmar如何检查cgi perl脚本的用户标识。和另一个过程。 – RootPhoenix