Forum Programmation.shell Comment faire un compteur

Posté par  .
Étiquettes : aucune
0
25
juil.
2006
Bonjour,

Je cherche comment faire un compteur:

Voila, j'ai une appli quand elle fonctionne génère beaucoup de process.
Quand j'arrête l'appli, cela prend environ 60 minutes.
Après 1 h il reste que très peu de process que je peux killer, mais cela cree des problèmes a la base qui d'une autre commande je la répare.

Ce que je souhaite faire, c'est :
1) arrêt de l'appli
2) faire un compteur qui toute les 60s vérifie le nombre de process puis au bout de 60 minutes kill ce qui reste.
3) si y a kill, lance la réparation de la base.

Le point 1 et 3 j'ai trouve mais pas le point 2.

Pour le point 2 j'ai pensé:

Pros='ps -ef | grep "mon process" | grep -c " "`
for i = 60s in 1
if [ $Pros ! = 0 ]
then
heu désolé je ne trouve pas.
En faite j'ai pas d'idée comment faire.

Quelqu'un aurrait il une idée ?

Merci d'avance.
  • # Hmm ...

    Posté par  . Évalué à 1.

    Je t'aurai bien aider, mais j'ai strictement rien compris à la partie "ce que tu veux faire" dans ton post...
  • # Peut-être ?

    Posté par  . Évalué à 2.

    i=60
    while [ $i -gt 0 ]; then
     nb = `ps h -C mon_programme | wc -l`
     if [ $nb == 0 ]; then
      break
     fi
     sleep 60
     let i--
    done
    
    Je précise, j'ai pas testé.
    • [^] # Re: Peut-être ?

      Posté par  . Évalué à 1.

      sans forcement faire le script aussi complet, j'utilise la sommande suivante pour compter le Nb de process d'un prog :

      ps afx | grep le_nom_du_process_ | wc -l

      attention a ne pas choper le grep dans les reponses...
      le nom_du_process doit etre bien clair pour eviter ca.

      K.
      • [^] # Re: Peut-être ?

        Posté par  . Évalué à 2.

        le classique pour pas chopper le grep, c'est de rajouter une paire de [] dans le nom du process, genre :
        ps <options de ps adapatées> | grep nom_du_proces[s]

        l'explication, c'est que grep interprête [] quand il s'exécute (et le remplace par le bête caractère entre crochet), ce qui ne match plus la ligne du grep (qui elle contient toujours la paire de crochet)
        C'est p-e plus clair en le testouillant soi même :-)
        • [^] # Re: Peut-être ?

          Posté par  . Évalué à 3.

          C'est pr ça que "l'option de ps adaptée" c'est -C :
          -C cmdlist Select by command name.
          This selects the processes whose executable name is given in cmdlist.

          et h pour supprimer le header ...
          • [^] # Re: Peut-être ?

            Posté par  . Évalué à 1.

            voui, j'avais lu le man mais pas le manque de sommeil (trop chaud) fait que j'avais pas tilté et eu la flemme de creuser. Je plaide coupable :-)
            A noter quand même que le -C est une option du ps GNU et donc pas portable sur HP et Solaris ...
      • [^] # Re: Peut-être ?

        Posté par  (site web personnel) . Évalué à 2.

        Rhâââ... Cettte manie de mettre du | de partout...

        Si on tient à utiliser grep, on peut utiliser son option -c :

        ps afx | grep le_nom_du_process_ -c

        Mais bon, tant qu'à faire, autant éviter d'utiliser grep, on évitera du même coup les "erreurs" de sortie embêtante :
        ps -C sshd --no-headers | wc -l
        • [^] # Re: Peut-être ?

          Posté par  . Évalué à 3.

          Et si on veut juste savoir si des processus tournent sans avoir besoin du nombre exact, on peut meme economiser le "wc -l" et utiliser $?

          $ ps -C sshd --no-headers > /dev/null && echo "sshd existe"
          >sshd existe

          $ ps -C sshda --no-headers > /dev/null || echo "sshda n existe pas"
          >sshda n existe pas
          • [^] # Re: Peut-être ?

            Posté par  (site web personnel) . Évalué à 2.

            Yep.

            En même temps, si le but est juste de savoir si un processus tourne ou non, j'ai l'impression que killall et moins coûteux que ps :

            killall -0 sshd && echo "sshd est vivant" ||echo "sshd plus là..."

            Mais nécessite d'être root...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.