あなたは$!:
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の不一致の理由であるかもしれない最後のシステムコールエラーが含まれています。 (USER列の値は、両方のプロセスのために同じである必要があります
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プロセスをと:出力は次のようになります。
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: $!";
:あなたは確認することPSを使用することができますプロセスが強制終了された場合)、そうでなければシグナルを送信することはできません(ただし、スクリプトがrootとして実行される場合は例外です)。
他のプロセスは同じユーザーIDで実行されていますか? rootのみが別のユーザーのプロセスにシグナルを送信できます。 – Barmar
エラーメッセージに '$!'を含めてみてください。エラーの理由が分かります。 – Barmar
@Barmarどのようにしてcgi perlスクリプトのユーザIDをチェックするのですか?他のプロセス。 – RootPhoenix