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 -
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;
}
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:
- Programmation script shell ksh unix
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Application de programmation - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
6 réponses
hello
est-ce que la différence est toujours la même ?
et avec cette commande :
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}');
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.
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 ?
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.