25 réponses
Et si tu ping une ip qui n'existe pas à partir d'un prompt, normalement, ton ping doit tomber en time-out et te rendre la main.
Est-ce le cas?
Sinon, suivant le man, as-tu un paramètre pour régler le timeout?
a+
eric
Est-ce le cas?
Sinon, suivant le man, as-tu un paramètre pour régler le timeout?
a+
eric
si je lance un ping d'ip inconnu :
[root@mylinux root]# ping 192.168.0.40
PING 192.168.0.40 (192.168.0.40) from 192.168.0.1 : 56(84) bytes of data.
From 192.168.0.1 icmp_seq=1 Destination Host Unreachable
From 192.168.0.1 icmp_seq=2 Destination Host Unreachable
From 192.168.0.1 icmp_seq=3 Destination Host Unreachable
From 192.168.0.1 icmp_seq=4 Destination Host Unreachable
From 192.168.0.1 icmp_seq=5 Destination Host Unreachable
From 192.168.0.1 icmp_seq=6 Destination Host Unreachable
From 192.168.0.1 icmp_seq=7 Destination Host Unreachable
From 192.168.0.1 icmp_seq=8 Destination Host Unreachable
From 192.168.0.1 icmp_seq=9 Destination Host Unreachable
From 192.168.0.1 icmp_seq=10 Destination Host Unreachable
From 192.168.0.1 icmp_seq=11 Destination Host Unreachable
From 192.168.0.1 icmp_seq=12 Destination Host Unreachable
From 192.168.0.1 icmp_seq=13 Destination Host Unreachable
From 192.168.0.1 icmp_seq=14 Destination Host Unreachable
From 192.168.0.1 icmp_seq=15 Destination Host Unreachable
il ne s'arrette pas si je l'arrete pas .
[root@mylinux root]# ping 192.168.0.40
PING 192.168.0.40 (192.168.0.40) from 192.168.0.1 : 56(84) bytes of data.
From 192.168.0.1 icmp_seq=1 Destination Host Unreachable
From 192.168.0.1 icmp_seq=2 Destination Host Unreachable
From 192.168.0.1 icmp_seq=3 Destination Host Unreachable
From 192.168.0.1 icmp_seq=4 Destination Host Unreachable
From 192.168.0.1 icmp_seq=5 Destination Host Unreachable
From 192.168.0.1 icmp_seq=6 Destination Host Unreachable
From 192.168.0.1 icmp_seq=7 Destination Host Unreachable
From 192.168.0.1 icmp_seq=8 Destination Host Unreachable
From 192.168.0.1 icmp_seq=9 Destination Host Unreachable
From 192.168.0.1 icmp_seq=10 Destination Host Unreachable
From 192.168.0.1 icmp_seq=11 Destination Host Unreachable
From 192.168.0.1 icmp_seq=12 Destination Host Unreachable
From 192.168.0.1 icmp_seq=13 Destination Host Unreachable
From 192.168.0.1 icmp_seq=14 Destination Host Unreachable
From 192.168.0.1 icmp_seq=15 Destination Host Unreachable
il ne s'arrette pas si je l'arrete pas .
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
426
9 juil. 2004 à 03:39
9 juil. 2004 à 03:39
il ne s'arrette pas si je l'arrete pas .
Bah oui, mais comparé à la commande que tu lances dans ton script, y'a un petit détail quand même...
Dans le script t'envoies un ping, si pas de réponse, tu fais ceci ou cela...
La commande que tu tapes au dessus, tu envoies des ping à l'infini, jusqu'à ce que tu demandes l'interruption (^C).
Donc Il faut rester sur un "ping -c 1" qui renvoi 0 en cas de réponse ou 1 en cas de timeout (0 et 1 étant accessibles par la variable spéciale $? qui contient le code retour de la derniere commande.)
Le 1 ou le zero tu t'en ballances, c'est geré par && et ||.
une autre variable utile est: $$ qui te donnes le PID du truc lancé.
-Donc dans un premier temps, quand tu lance ton script dans le cas ou l'ip ne répond plus au ping.
Il faut lancer le script s'il n'est pas déjà lancé.
Pour celà, tu fais un test
tu execute les script sinon, tu sors.
dans la suite du script (si prog.pid n'existe pas)
il faut le créer, et le remplir avec le pid du script.
-Dans le second cas, le ping répond, ils faut donc arreter le prog si'il est en cours, ou ne rien faire.
Le test:
sinon, on fais rien.
Kill -9, c'est un peu bourrin, masi ça fonctionne si tu n'as rien prévu d'autre ;)
Pour optimiser le tout, il faudrais spécifier "-w 1" dans la commande ping.
C'est le time out en seconde, donc 1 parait raisonable enfin c'est reglable ;)
Pour le reste des iptimisation, il faut voir les man, surtout man bash!!!
@++
Bah oui, mais comparé à la commande que tu lances dans ton script, y'a un petit détail quand même...
ping -c 1 ip
Dans le script t'envoies un ping, si pas de réponse, tu fais ceci ou cela...
La commande que tu tapes au dessus, tu envoies des ping à l'infini, jusqu'à ce que tu demandes l'interruption (^C).
Donc Il faut rester sur un "ping -c 1" qui renvoi 0 en cas de réponse ou 1 en cas de timeout (0 et 1 étant accessibles par la variable spéciale $? qui contient le code retour de la derniere commande.)
Le 1 ou le zero tu t'en ballances, c'est geré par && et ||.
une autre variable utile est: $$ qui te donnes le PID du truc lancé.
-Donc dans un premier temps, quand tu lance ton script dans le cas ou l'ip ne répond plus au ping.
Il faut lancer le script s'il n'est pas déjà lancé.
Pour celà, tu fais un test
if [ ! -e prog.pid ]si le fichier prog.pid n'existe pas.
tu execute les script sinon, tu sors.
dans la suite du script (si prog.pid n'existe pas)
il faut le créer, et le remplir avec le pid du script.
echo $$ > prog.pid
-Dans le second cas, le ping répond, ils faut donc arreter le prog si'il est en cours, ou ne rien faire.
Le test:
if [ -e prog.pid ]Si le fichier existe alors il faut quitter l'application puis supprimer le fichier.
sinon, on fais rien.
kill -9 `cat prog.pid` rm -f prog.pid
Kill -9, c'est un peu bourrin, masi ça fonctionne si tu n'as rien prévu d'autre ;)
Pour optimiser le tout, il faudrais spécifier "-w 1" dans la commande ping.
C'est le time out en seconde, donc 1 parait raisonable enfin c'est reglable ;)
Pour le reste des iptimisation, il faut voir les man, surtout man bash!!!
@++
♫ Il suffirait de presque rien...
Oui, c'est ce que je soupconne aussi: il manque un timeout. Mais il faut voir quelle version de ping Greg a. Sur certaines, le timeout existe mais n'est pas configurable, sur d'autres par contre, il existe l'option -W qui permet de la spécifier.
Par contre, je suis tout-à-fait contre l'utilisation d'un kill -9 là ou ce n'est pas utile. Entre autres parce que si le programme que tu tues a une shared memory, tu ne la récupères pas.
Quant à l'utilisation du $$, elle ne nous est pas utile puisqu'il s'agit du PID su shell d'origine. Or ce qu'il me faut, c'est le PID de la dernière tâche de fond, d'ou l'utilisation de $!.
a+
eric
Par contre, je suis tout-à-fait contre l'utilisation d'un kill -9 là ou ce n'est pas utile. Entre autres parce que si le programme que tu tues a une shared memory, tu ne la récupères pas.
Quant à l'utilisation du $$, elle ne nous est pas utile puisqu'il s'agit du PID su shell d'origine. Or ce qu'il me faut, c'est le PID de la dernière tâche de fond, d'ou l'utilisation de $!.
a+
eric
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
426
9 juil. 2004 à 21:41
9 juil. 2004 à 21:41
S'il n'a pas de timeout, il y aura un timeout par défaut, donc à partir du moment ou il envoie un unique ping ou un nombre bien defini avec -c, il n'y aura aucun probléme, ce sera juste moins souple.
Pour le kill -9, je l'ai dis, c'est bourrin, mais s'il n'a pas prévu d'autre sortie, ça fonctionnera toujours, mon but était plus de donner une marche à suivre qu'une solution.
Pour l'utilisation de $$, c'est pas tout à fait ça ;-)
echo $$ à la ligne de commande te donnes effectivement le PID du shell. Dans un script en revanche, c'est le PID du script :-)
C'est, si ma mémoire est bonne, la variable spéciale correspondante au Parent Process ID (PPID)
@++
Pour le kill -9, je l'ai dis, c'est bourrin, mais s'il n'a pas prévu d'autre sortie, ça fonctionnera toujours, mon but était plus de donner une marche à suivre qu'une solution.
Pour l'utilisation de $$, c'est pas tout à fait ça ;-)
echo $$ à la ligne de commande te donnes effectivement le PID du shell. Dans un script en revanche, c'est le PID du script :-)
C'est, si ma mémoire est bonne, la variable spéciale correspondante au Parent Process ID (PPID)
@++
♫ Il suffirait de presque rien...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question