2016-04-23 76 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身份運行,這是不推薦的)。