Programmation script shell ksh unix

Gourou Dsecours Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 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;
}
A voir également:

6 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
Gourou Dsecours Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
sur quel OS ?
0
Kharec Messages postés 4146 Date d'inscription   Statut Contributeur Dernière intervention   510
 
Sûrement un GNU/Linux, un BSD ou un Unix-Like!
0
Gourou Dsecours Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
AIX 5.3
0
Kharec Messages postés 4146 Date d'inscription   Statut Contributeur Dernière intervention   510 > Gourou Dsecours Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Okay. Joli système, soi dit au passage.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
et en utilisant ps -eo comm plutot que args ?
0
Gourou Dsecours Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
bizarre, rien dans le reste du script qui puisse faire varier le nombre de processes ?
0
Gourou Dsecours Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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