begin process at 2012 05 30 02:50:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

killer un processus pére sans perdre le fils


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

killer un processus pére sans perdre le fils

mardi 1 août 2006 à 15:39:55 | killer un processus pére sans perdre le fils

nander

bonjour!

je cherche a faire un petit programme de mise a jours de mes application.
mon application principale lance mon programme qui kill a lors son pére (l'application principale). Mon probleme est que lorsque l'on kill un pere on kill aussi tout ses fils.
j'ai essayer d'appeller mon prog de MAJ avec la cmd system().

sinon j'ai vue que je pouvais utilisé une des fonctions exec(). mais es ce que le fichier executable de mon programme principal  pourra etre remplacé si j'utilise cette commande. car il est impossible de remplace un fichier en cour d'utilisation.
mercredi 2 août 2006 à 10:39:06 | Re : killer un processus pére sans perdre le fils

Guillemouze

ca depend si tu utilise des processus legers( thread) ou lourds (fork()).
je pense pas que tu puisse avec des threads, mais j'en suis pas sur
mercredi 2 août 2006 à 12:27:29 | Re : killer un processus pére sans perdre le fils

nander

Ni l'un  Ni l'autre

j'ai realisé un programme totalement a part et je l'execute dans mon programme pere grace a l'appel a la fonction systeme() ou exec().
mon programme de mise a jour (le fils) commence par killer sont pere (le prog a mettre a jour) et apres il ne fait plus rien alors que le code devrait continuer par la copie d'un fichier depuis un repertoire source vers un repertoire destination fournie en parametre.

mercredi 2 août 2006 à 13:56:19 | Re : killer un processus pére sans perdre le fils

Guillemouze

apparament, exec remplace le processus courant par celui passe en parametre de la fonction.
donc par exemple si dans le programme P1 tu fais un exec(P2), alors P2 prend le PID de P1. donc si tu kill P1 a partir de P2, tu ne fait que killer P2 en fait (je sais pas si je suis tres clair!).

donc si j'azi bien compris ce que tu veu faire, tu a juste pas besoin de killer P1, vu qu'il se termine au lancement de P2!!!

Extrait de la manpage de execve:
En cas de réussite, execve() ne revient pas à  l'appelant, et les segments de texte, de données, ainsi que la pile du processus appelant sont remplacés par ceux du programme chargé. Le programme invoqué hérite du PID du processus appelant
mercredi 2 août 2006 à 14:02:55 | Re : killer un processus pére sans perdre le fils

nander

oui effectivement j'ai vue ca ce midi aussi donc je vais esseyer de faire un exec sans killer de processus et je vais voir si je peut remplacer mon executable comme ca
merci guillemouze
mercredi 2 août 2006 à 15:14:18 | Re : killer un processus pére sans perdre le fils

nander

bon voici le bout de code quui lance mon appli de mise a jour :
----------------------------
char cmd[50];
sprintf(cmd,"%SMAJ.exe",Application-> getRepAppli()); //Application-> getRepAppli() renvoi le repertoire de l'application
printf("%s",cmd); // affiche /Users/nander/Desktop/lanceur/trunk/macos/appli/build/Debug/MAJ.exe
execl(cmd,"MAJ.exe",RepTemp,Application-> getRepAppli());
-----------------------------

le probleme c que la fonction execl revient toujours dans le code appelant.
le MAJ.exe est bien dans le bon repertoire. il attend en argument le chemin du repertoire source et en 2eme argument le repertoire de destination.


mercredi 2 août 2006 à 15:37:34 | Re : killer un processus pére sans perdre le fils

MuPuF

Lol, y'a bien plus simple que ça, tu ouvres MAJ.exe avec shellexecute et tu quitte ton exe toi meme. Je te jure que ça marche ;-)
mercredi 2 août 2006 à 15:44:46 | Re : killer un processus pére sans perdre le fils

nander

merci mais si tu regarde bien on est dans la partie reservée à linux donc mon code est fait pour tourner sous unix et visiblement shellexecute ne fonctionne pas sous unix!!
mercredi 2 août 2006 à 15:53:42 | Re : killer un processus pére sans perdre le fils

Guillemouze

c bizare, dans ce que j'ai marsque plus haut, il y a :

Extrait de la manpage de execve:
En cas de réussite, execve() ne revient pas à  l'appelant

Ca veut peut etre dire que la commande a echouée?

essaye de faire ca dans ton prog:
...
printf("avant exec\n");
exec("progtest"); // je connai pas exactement la synthaxe, mais le but est d'executer un prog test
printf("apres exec\n");
...

et ton progtest du genre

main(...) {
    printf("prog test\n");
    return 0;
}

et verifie, si tt se passe comme prevu il devrait te mettre
>avant exec
>prog test

et c'est tout. sinon ya un pb kekpart
mercredi 2 août 2006 à 15:59:17 | Re : killer un processus pére sans perdre le fils

MuPuF

ouille dsl
impossible d'executer un programme sans être le pere de celui çi ?
Spécial comme truc quand meme ...



Cette discussion est classée dans : programme, application, kill, fils, pére


Répondre à ce message

Sujets en rapport avec ce message

Processus [ par ToToL ] BonjoursJ'ai un programme en mode : console application.j'aimerai savoir comment voir si mon application est déjà lancée ou non. s'il y a plusieurs me Application en C++ Lancement de programme [ par BARA_Marie ] Jean-LucCaomment puis je empêcher une application en c++ de se recharger une deuxième fois si elle l'est déjà. ?Et comment faire lorsque je lance une Tâche de fond: comment communiquer avec l'utilisateur? [ par vychnou ] Bonjour à tous !Voici mon problème:je code un petit programme qui marche comme un supplément pour une grosse application.En clair, l'utilisateur est e Détecter une erreur dans un process ? [ par chuckboy ] Bonjour à tousJe cherche à détecter une erreur dans un process externe.J'explique , je lance un process "CreateProcess(NULL, (LPTSTR)sExecutable.c_str shellExecute [ par vincelefou ] Bonjour, J’aimerai faire un petit programme (en C + API) permettant de lancer une application en lui transmettant des paramètres. C’est possible avec Un programme qui en créé un autre. [ par darkdidi ] Bonjour!Je voudrais savoir comment faire un programme qui créé une application en prenant en compte des parametres de la part de l'utilisateur.Voici c J'ai besoin qu'on me programme une bete application [ par Misterover ] Salut a tous,J'aurai besoin qu'on me programme un bete programme de compte a rebours.Je le lance, je choisis une duree (en heures) et une fois le nomb Deploiment de programme fait avec VC8 [ par moumouteb ] Bonjour. Je viens de me rendre compte que tous les programmes que je compile avec VC8 marchent très bien chez moi mais dès que je les exécute sur un a fermer une application exterieur au programme [ par moumouteb ] Bonjour, Existe une fonction pour fermer un programme en cour d'exécution? Un peu comme WinExec permet de les ouvrir. merci


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,103 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales