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 -
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;
}
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
-
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}');-
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.
-
-
sur quel OS ?
-
et en utilisant ps -eo comm plutot que args ?
-
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
bizarre, rien dans le reste du script qui puisse faire varier le nombre de processes ?
-
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'" ;