Précédent   Forum des professionnels en informatique > Systèmes > 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
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/02/2008, 14h50   #1
Invité régulier
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 5
Points : 5
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 :
1
2
3
4
5
6
7
8
9
10
 
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 00
Vieux 15/02/2008, 15h15   #2
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 969
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 969
Points : 1 376
Points : 1 376
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 00
Vieux 16/02/2008, 10h06   #3
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 779
Points : 7 779
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 :
1
2
3
4
5
6
7
8
9
10
 
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
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 12h01   #4
Invité régulier
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 5
Points : 5
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 00
Vieux 16/02/2008, 16h18   #5
Expert Confirmé
 
Avatar de Katyucha
 
Inscription : mars 2004
Messages : 3 109
Détails du profil
Informations personnelles :
Âge : 31
Localisation : Allemagne

Informations forums :
Inscription : mars 2004
Messages : 3 109
Points : 3 313
Points : 3 313
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
__________________
Ancien Rédacteur Linux && Unix / Nouveau retraité de DVP
The UNIX way of sex:
gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

Je ne réponds ni aux messages privées, ni aux messages plein de fautes...
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 21h51   #6
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 969
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 969
Points : 1 376
Points : 1 376
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 00
Vieux 17/02/2008, 13h20   #7
Invité régulier
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 5
Points : 5
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 00
Vieux 17/02/2008, 23h58   #8
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 969
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 969
Points : 1 376
Points : 1 376
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 00
Vieux 01/03/2008, 12h55   #9
Invité régulier
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 5
Points : 5
Merci Jliagre je vais explorer ce contenu )
Fung999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h28.


 
 
 
 
Partenaires

Hébergement Web