2016-04-23 44 views
1

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

my $pid = `pidof xyz`; 

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

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

如何将信号发送到cgi perl脚本中名为“xyz”的进程。

+0

其他进程是否运行相同的用户ID?只有root可以发送信号给不同的用户进程。 – Barmar

+0

尝试在错误消息中包含'$!',以便查看错误原因。 – Barmar

+0

@Barmar如何检查cgi perl脚本的用户标识。和另一个过程。 – RootPhoenix

回答

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身份运行,这是不推荐的)。

相关问题