Mes compétences en Perl sont basiques, mais pour obtenir un vrai Top filtré par nom, enregistrez ce code dans un fichier appelé topn.pl :
#!/usr/bin/perl
shift @ARGV;
$name = shift @ARGV;
@pids = `/bin/ps -eo pid,user,args | /bin/grep $name | /bin/grep -v grep | /usr/bin/tr -s " " `;
$arg = "";
foreach (@pids) {
$_ =~ /^\s([0-9]+)\s/;
$pid = $1;
$arg .= " p $pid " if $pid != "";
}
exec("/usr/bin/top $arg @ARGV");
Utilisation : topn.pl -n FOO c 2
où FOO est le nom du processus à greper. Le reste des arguments est transmis à top.
Top accepte au maximum 20 PID comme arguments.