IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Biblioth�que standard C Discussion :

[Linux] attendre la fin d'execution d'un process en C


Sujet :

Biblioth�que standard C

  1. #1
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut [Linux] attendre la fin d'execution d'un process en C
    Bonjour.
    J'ai une application qui doit,� partir d'un pid, stopper un processus et attendre qu'il soit termin�. Si j'ai bien compris waitpid marche uniquement si le pid est celui d'un processus enfant. Ce cas correspond � tous les exemple que j'ai trouv� sur le net..

    • Comment faire si le processus n'est pas un enfant? J'ai r�ussi � faire quelque chose en utilisant kill(pid,0) (teste l�existence du pid) et une boucle mais je ne sais pas si c'est la bonne m�thode.
    • Si le pid correspond � processus enfant, es ce pr�f�rable d'utiliser wait ou alors utiliser kill(pid,0) est possible si je g�re le signal SIGCHLD?
    • Y a t-il une m�thode particuli�re pour savoir si le pid correspond � un process enfant?


    En gros je cherche � faire une fonction qui pour n'importe quel PID (enfant ou non) :
    1- envoie d'un SIGTERM
    2- attend la fin du processus.
    3- si au bout de 2 secondes le processus n'est pas termin� : envoie d'un SIGKILL



    Merci

  2. #2
    Mod�rateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 490
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur d'emploi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 490
    Par d�faut
    Bonjour,

    Ce n'est pas simple. � ma connaissance, il n'y a pas d'appel syst�me d�di� pour faire cela dans le contexte dans lequel tu te places. Par ailleurs, les appels wait() et d�riv�s sont faits non seulement pour attendre la fin d'un processus fils mais �galement pour indiquer au syst�me que le p�re en a fait le deuil et donc, surtout, que le processus d�funt peut quitter l'�tat zombie Z pour passer d�finitivement � la post�rit�. Donc, si tu as un processus enfant, il est important d'utiliser wait() pour cette raison.

    Pour pouvoir prendre le contr�le sur un processus quelconque, tu peux utiliser ptrace(), qui sert en principe aux debuggers. �a te permettra d'acc�der � pas mal d'infos et de g�rer les signaux. L'appel est standard UNIX mais les m�ta-infos du processus sont sp�cifiques � chaque syst�me et peuvent varier sans pr�avis. Autre inconv�nient s�rieux : le processus ne doit pas �tre d�j� suivi (par un autre processus comme le tien ou par un d�bogueur l�gitime).

    En dehors de cela, la mani�re � normale � de traiter ces cas consiste � parser le contenu de � /proc �, qui sert � �a. C'est ce que font les commandes shell comme ps (un coup de strace dessus pour s'en convaincre). Ce n'est pas simple mais � man proc � est bien document�. Pour savoir si un processus est un fils ou d'une mani�re g�n�rale un lointain descendant, tu peux r�cup�rer son PPID depuis /proc/n/stat et remonter r�cursivement jusqu'� rencontrer soit ton propre PID, soit 0 (les processus sans p�re ont un PPID nul dans stat, m�me si en pratique ils sont trait�s comme s'ils �taient rattach�s � init). Sous Linux en particulier, tu peux utiliser inotify pour surveiller l'existence du r�pertoire correspondant au processus dans /proc. Quand il dispara�t, le processus a cess� d'exister.

  3. #3
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Merci beaucoup pour les �claircissements.
    Effectivement si je kill un process qui tombe en zombie, je suis bloqu�. En v�rifiant l��tat du pid avec le fichier status je r�sout ce cas.


    yan

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Ne pas attendre la fin d'execution d'une m�thode
    Par w3blogfr dans le forum Langage
    R�ponses: 1
    Dernier message: 05/03/2010, 16h08
  2. attendre la fin d'execution d'une simulation
    Par ABN84 dans le forum Simulink
    R�ponses: 1
    Dernier message: 26/11/2009, 08h18
  3. R�ponses: 4
    Dernier message: 24/01/2007, 00h48
  4. [Batch] attendre fin d'execution d'un msi
    Par meda dans le forum Windows
    R�ponses: 2
    Dernier message: 06/12/2006, 14h55
  5. [Syst�me] Lancer un executable sans attendre la fin
    Par raptor70 dans le forum Langage
    R�ponses: 1
    Dernier message: 27/10/2005, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo