Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > Unix

Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix

Réponse
 
Outils de la discussion
Vieux 15/02/2008, 14h50   #1 (permalink)
Invité régulier
 
Date d'inscription: février 2008
Messages: 14
Par défaut Filiation process sur Unix

Je dois developper un script permettant de vérifier la filiation d'un process A par rapport à un process B : si le process A est bien enclenché par B, je dois effectuer un traitement.

Seulement là ou 'je coince' c'est que le cahier des charges est assez "serré" :
notamment pour éviter au max les problèmes de portage, il ne doit pas y avoir de commande spécifiquement basé sur le PPID.

Je pensais à un truc de ce genre mais le soucis c'est que c'est codé un peu 'crade' à mon goût...

- coller le contenu du pstree du process A dans un fichier en supprimant les caracteres 'speciaux' (les traits et autres permettant de 'dessiner' la hierarchie)
- inverser le contenu du fichier de façon à ce que le process 'fils' soit en premiere ligne (c'est la fonction sed '1!G;h;$!d')
- prendre la 2eme ligne (qui contient normalement le pere du process en 1ere ligne)
- vérifier dans cette ligne que le PID correspond a celui du process pere
- si c'est ok, effectuer le traitement

Ce qui donnerait :

Code :
 
pstree -g 0 -p $PROC | sed 's/\\-+=//g;s/\\-+-//g;s/\\---//g' | sed '1!G;h;$!d'> fichier_tmp.txt

LIGNE_MOT=`cat fichier_tmp.txt | head -2 | tail -1`
echo $LIGNE_MOT | grep $PID_SCRIPT_A | grep $LOGIN

 if [ $? = 0 ]
    then
     Echo "Traitement demarre ici"
 fi
Auriez-vous des conseils, astuces ou autres infos pour 'améliorer' ce truc en évitant au max les 'spécifications' d'OS (ca doit tourner sur tout Unix).
Fung999 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 15/02/2008, 15h15   #2 (permalink)
Membre éprouvé
 
Avatar de jlliagre
 
Date d'inscription: juin 2007
Localisation: Paris
Messages: 411
Par défaut

Citation:
Envoyé par Fung999 Voir le message
Je dois developper un script permettant de vérifier la filiation d'un process A par rapport à un process B : si le process A est bien enclenché par B, je dois effectuer un traitement.

Seulement là ou 'je coince' c'est que le cahier des charges est assez "serré" :
notamment pour éviter au max les problèmes de portage, il ne doit pas y avoir de commande spécifiquement basé sur le PPID.
Peux tu préciser exactement ce que stipule ton "cahier des charges" ?
Citation:
- coller le contenu du pstree ......

Auriez-vous des conseils, astuces ou autres infos pour 'améliorer' ce truc en évitant au max les 'spécifications' d'OS (ca doit tourner sur tout Unix).
pstree n'est pas portable. Si tu dois coder quelque chose qui tour sous tous les Unix, utilise la commande ps avec des options Posix et en particulier l'affichage du PPID.
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/02/2008, 10h06   #3 (permalink)
Membre Expert
 
Avatar de frp31
 
Date d'inscription: juillet 2006
Localisation: toulouse
Messages: 1 474
Par défaut

Citation:
Envoyé par Fung999 Voir le message
Je dois developper un script permettant de vérifier la filiation d'un process A par rapport à un process B : si le process A est bien enclenché par B, je dois effectuer un traitement.

Seulement là ou 'je coince' c'est que le cahier des charges est assez "serré" :
notamment pour éviter au max les problèmes de portage, il ne doit pas y avoir de commande spécifiquement basé sur le PPID.

Je pensais à un truc de ce genre mais le soucis c'est que c'est codé un peu 'crade' à mon goût...

- coller le contenu du pstree du process A dans un fichier en supprimant les caracteres 'speciaux' (les traits et autres permettant de 'dessiner' la hierarchie)
- inverser le contenu du fichier de façon à ce que le process 'fils' soit en premiere ligne (c'est la fonction sed '1!G;h;$!d')
- prendre la 2eme ligne (qui contient normalement le pere du process en 1ere ligne)
- vérifier dans cette ligne que le PID correspond a celui du process pere
- si c'est ok, effectuer le traitement

Ce qui donnerait :

Code :
 
pstree -g 0 -p $PROC | sed 's/\\-+=//g;s/\\-+-//g;s/\\---//g' | sed '1!G;h;$!d'> fichier_tmp.txt

LIGNE_MOT=`cat fichier_tmp.txt | head -2 | tail -1`
echo $LIGNE_MOT | grep $PID_SCRIPT_A | grep $LOGIN

 if [ $? = 0 ]
    then
     Echo "Traitement demarre ici"
 fi
Auriez-vous des conseils, astuces ou autres infos pour 'améliorer' ce truc en évitant au max les 'spécifications' d'OS (ca doit tourner sur tout Unix).
c'est rigoureusement impossible la seule solution existante est la gestion du PPID
__________________
Bye @+
(\__/)
(o..o)
(") (")

Soutenez le logiciel libre
frp31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/02/2008, 12h01   #4 (permalink)
Invité régulier
 
Date d'inscription: février 2008
Messages: 14
Par défaut

Citation:
Peux tu préciser exactement ce que stipule ton "cahier des charges" ?
Il faut juste que j'évites l'usage du PPID : En gros, ca doit tourner sur Solaris et HP.
Hors sous Solaris il faut être root il me semble pour avoir le PPID du proc...
Là ou j'ai un soucis c'est justement pour pouvoir faire le portage sans avoir X lignes de code redondante via l'usage d'un case.

Il semblerait alors qu'il n'y ait pas de moyen "simple"...
Fung999 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/02/2008, 16h18   #5 (permalink)
Rédacteur
 
Avatar de Katyucha
 
Date d'inscription: mars 2004
Localisation: Parti pour de bon
Âge: 28
Messages: 3 041
Par défaut

Citation:
Envoyé par Fung999 Voir le message
Il faut juste que j'évites l'usage du PPID : En gros, ca doit tourner sur Solaris et HP.
Hors sous Solaris il faut être root il me semble pour avoir le PPID du proc...
Là ou j'ai un soucis c'est justement pour pouvoir faire le portage sans avoir X lignes de code redondante via l'usage d'un case.

Il semblerait alors qu'il n'y ait pas de moyen "simple"...
il te semble mal....
Quelque soit l'utilisateur sur tout serveur unix, tu peux lancer un ps
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/02/2008, 21h51   #6 (permalink)
Membre éprouvé
 
Avatar de jlliagre
 
Date d'inscription: juin 2007
Localisation: Paris
Messages: 411
Par défaut

Citation:
Envoyé par Fung999 Voir le message
Hors sous Solaris il faut être root il me semble pour avoir le PPID du proc...
La seule restriction de ps sous Solaris est l'affichage de la ligne de commande complète. L'affichage du ppid n'est absolument pas restreint puisqu'il n'induit aucune vulnérabilité.
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 17/02/2008, 13h20   #7 (permalink)
Invité régulier
 
Date d'inscription: février 2008
Messages: 14
Par défaut

Citation:
Si tu dois coder quelque chose qui tour sous tous les Unix, utilise la commande ps avec des options Posix et en particulier l'affichage du PPID.
Je vais tenter ça, reste à trouver les options qui vont bien pour avoir une sortie 'standard' sur les 2 plateformes.
Fung999 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 17/02/2008, 23h58   #8 (permalink)
Membre éprouvé
 
Avatar de jlliagre
 
Date d'inscription: juin 2007
Localisation: Paris
Messages: 411
Par défaut

Citation:
Envoyé par Fung999 Voir le message
Je vais tenter ça, reste à trouver les options qui vont bien pour avoir une sortie 'standard' sur les 2 plateformes.
Ce n'est pas compliqué. Il suffit que tu utilises la syntaxe POSIX décrite dans l'URL suivante plutôt que regarder les pages de manuel des différents OS cibles, qui risquent de présenter des extensions non portables.
http://www.opengroup.org/onlinepubs/...lities/ps.html
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/03/2008, 12h55   #9 (permalink)
Invité régulier
 
Date d'inscription: février 2008
Messages: 14
Par défaut

Merci Jliagre je vais explorer ce contenu )
Fung999 est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > Unix



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide