#!/usr/bin/perl
 
# use as: $0 <PID>
 
use warnings;
use strict;
use bignum;
use Config;
 
defined $Config{sig_name} or die "Cannot find signal names in Config";
my @sigs = map { "SIG$_" } split(/ /, $Config{sig_name});  
 
my $statfile = "/proc/$ARGV[0]/status";
 
open(S, "<", $statfile) or die "Cannot open status file $statfile";
 
while(<S>) {
  chomp;
  if (/^Sig(Blk|Ign|Cgt):\s+(\S+)/) {
    if (my @list = grep { oct("0x$2") & (1 << ($_ - 1)) } (1..64) ) {
      print "$1: " . join(", ", map { "$sigs[$_] ($_)" } @list) . "\n";
    }
  }
}
 
close(S);

