[gull] truc et astuce: strace pour chercher l'erreur
Félix Hauri
felix at f-hauri.ch
Sat May 7 14:05:02 CEST 2005
Salut la liste,
Pour commencer, un petit script qui utilise les commandes ``dialog'', ``whiptail''
ou ``gdialog'' pour afficher une barre de progression:
$ env DIALOG=gdialog gauge.pl kernel-source-2.0.12.tar.b2 | tar -jxC destdir/
vous pourrer le trouver à http://f-hauri.ch/vrac/gauge-pl.txt
Voici un petit truc tout con, lorsqu'un programme ne fait pas ce que l'on
voudrait alors que sous une autre config ou utilisateur, le même programme
fonctionne differement (mieux;):
$ strace 2>&1 leprogrammeencause args | grep ^open.*$USER
...
Pour savoir si un programme lancé antérieurement tourne ou est ``planté''
$ strace 2>&1 -p $(ps -C leprogrammeencause o pid=) | grep '^\(read\|write\)'
ou
$ prgpid=$(ps -C leprogrammeencause o pid=)
$ strace 2>&1 -p $prgpid | grep '^\(read\|write\)'
...
Enfin, pour avoir une idée de son débit,
(j'utilise perl, c't'un poil plus long;)
$ perl -e '
my $pid=$ARGV[0];
open FH,"strace 2>&1 -p $pid |" or die;
my ($first,%tot)=(time(),{ read => 0 , write => 0 });
while (<FH>) {
/(read|write).* = (\d+)$/ && do {
$tot{$1}=$tot{$1}+$2;
my $etim=time()-$first;
syswrite ( STDOUT,
sprintf "\rR:%12d W:%12d %8d -> r:%11.2fK/s w:%11.2fK/s",
$tot{read}, $tot{write}, $etim,
$tot{read}/$etim/1024, $tot{write}/$etim/1024 )
if $etim > 0;
}
}; ' $prgpid
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list