2016-04-23 7 views
1

cgi perlスクリプトでxyzという名前のプロセスにsigusr2シグナル番号12を送信する必要があります。私は次のようにします: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スクリプトのユーザIDをチェックするのですか?他のプロセス。 – 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の不一致の理由であるかもしれない最後のシステムコールエラーが含まれています。 (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として実行される場合は例外です)。

関連する問題