gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:18 25 4
gpt4 key购买 nike

我必须在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com