#!/usr/bin/perl # # Copyright (c) 2002 Steve Slaven, All Rights Reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # # Diff /proc/* with ps ax %ps = (); open( PS, "ps ax |" ); ; while( $ps = ) { ( $pid, $cmdline ) = $ps =~ /^\s*(\d+)\s+\S+\s+\S+\s+\S+\s+(\S.*)/; $cmdline =~ s/\s+$//; $ps{ $pid } = $cmdline; } close( PS ); opendir( DIR, "/proc" ); print "E = Exists, M = Match\n"; printf( "%-5s %1s %-25s %-25s %-10s\n", "PID", "E", "PS CMD", "PROC CMD", "NAME" ); print "-" x 70 . "\n"; while( $pid = readdir( DIR ) ) { next unless $pid =~ /^\d/; $exists = exists( $ps{ $pid } ) ? " " : "*"; open( IN, "/proc/$pid/cmdline" ); chomp( $cmdline = ); close( IN ); $cmdline =~ s/\0/ /g; open( IN, "/proc/$pid/status" ); while( $l = ) { if( $l =~ /^Name/ ) { chomp( $l ); ( $name ) = $l =~ /^Name:\s+(.*)/i; } } close( IN ); $cmdline =~ s/^(.{0,25}).*$/$1/; $ps{ $pid } =~ s/^(.{0,25}).*$/$1/; printf( "%05d %1s %-25s %-25s %-10s\n", $pid, $exists, $ps{ $pid }, $cmdline, $name ); } closedir( DIR );