我必须在 cgi perl 脚本中将 sigusr2 信号编号 12 发送到名为 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 不匹配(如您帖子的评论中所述)可能是原因。您可以使用 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
对于两个进程(Perl 进程和被杀死的进程),USER 列的值应该相同,否则不允许发送任何信号(除非您的脚本运行作为 root,不推荐这样做)。
关于linux - 无法将信号发送到perl中的另一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36810178/