Programmation script shell ksh unix

Gourou Dsecours Messages postés 5 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je développe une fonction pour un script shell sous ksh qui doit me renvoyer le nombre d'instances du programme principal en cours de traitement, et s'arrêter si ce nombre est supérieur à 1.

Relativement simple, pensai-je.

Seulement voilà, les résultats que j'obtiens sont différents de ce que je suis en droit d'attendre. Le nombre de processus que j'obtiens en résultat est souvent supérieur ou inférieur.

J'ai probablement dû me tromper quelque part, mais impossible de trouver où est mon erreur !

Même en appelant deux fois mon calcul, je n'ai pas deux fois le même résultat !

Toute aide est la bienvenue !

Mon code :

function NombreDeProcessus
{
PROCESSUS=$1 ;
VAL_1=`ps -eo args | grep -F "${PROCESSUS}" | grep -vF "grep" | wc -l | tr -d [:blank:]`;
VAL_2=$(ps -eo args | grep -F "${PROCESSUS}" | grep -vF "grep" | wc -l | tr -d [:blank:]);
echo "Valeur 1 : '$VAL_1'" ;
echo "Valeur 2 : '$VAL_2'" ;
return $VAL_2;
}
Configuration: Windows XP
Firefox 3.0.14

6 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    est-ce que la différence est toujours la même ?
    et avec cette commande :
    VAL_1=`ps -eo args|awk '/awk/ {next};/'"${PROCESSUS}"'/ {x++};END{print x}'`;
    VAL_2=$(ps -eo args|awk '/awk/ {next};/'"${PROCESSUS}"'/ {x++};END{print x}');
    0
    1. Gourou Dsecours Messages postés 5 Statut Membre
       
      Merci pour ta réponse,

      Je vais essayer ta solution, même si je suis un peu découragé, pour déjà avoir essayé plusieurs variantes utilisant AWK.

      La différence entre les deux valeurs n'est pas toujours la même :
      - parfois, les deux me donnent une solution juste
      - parfois seulement l'une des deux me donne le bon résultat
      - parfois, aucune des deux ne me donne le nombre correct de processus.

      Pour compléter, je précise que le nom de processus est caractéristique, unique dans le système, et comme je suis root de ma machine, il n'y a pas de processus "non contrôlé" qui se lancerait à l'insu de mon plein gré.

      Par ailleurs, mon script ne crée pas de processus fils, donc il n'y a pas de confusion possible avec des fils non contrôlés.
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    sur quel OS ?
    0
    1. Kharec Messages postés 4146 Date d'inscription   Statut Contributeur Dernière intervention   511
       
      Sûrement un GNU/Linux, un BSD ou un Unix-Like!
      0
    2. Gourou Dsecours Messages postés 5 Statut Membre
       
      AIX 5.3
      0
      1. Kharec Messages postés 4146 Date d'inscription   Statut Contributeur Dernière intervention   511 > Gourou Dsecours Messages postés 5 Statut Membre
         
        Okay. Joli système, soi dit au passage.
        0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    et en utilisant ps -eo comm plutot que args ?
    0
  4. Gourou Dsecours Messages postés 5 Statut Membre
     
    Encore une variante possible... J'avais aussi essayé avec ps -ef.... Peu importe. Quand j'entre les commandes manuellement, ça marche nickel, j'ai direct les bons résultats.

    C'est lorsque je les lance depuis un script que mes résultats semblent devenir plus ... aléatoires.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    bizarre, rien dans le reste du script qui puisse faire varier le nombre de processes ?
    0
    1. Gourou Dsecours Messages postés 5 Statut Membre
       
      En fait, à la base, pour l'instant, le script ne contient que ce code-là.

      Absolument rien d'autre. J'ai développé cette fonctionnalité de façon indépendante, et je la teste de façon indépendante des éventuels autres scripts dans lesquels elle pourrait s'insérer.
      0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    et en exécutant manuellement les 2 commandes mais sur la même ligne pour qu'elles s'exécutent très rapidement l'une après l'autre
    VAL_1=`ps -eo args...; VAL_2=$(ps -eo args...

    il faut enlever ' (simple quote), le $ n'est pas traité entre ' '
    echo "Valeur 1 : '$VAL_1'" ;
    echo "Valeur 2 : '$VAL_2'" ;
    0