Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2208 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C Ansi] Obtenir le pid d'un processus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C Ansi] Obtenir le pid d'un processus

n°990166
totalchuck
Posté le 22-02-2005 à 17:49:11  profilanswer
 

Bonjour,
 
Je développe en C sous Linux.
Je veux faire un programme qui lance un processus puis qui le kill.
La procedure kill() prend en parametre un pid, il faut donc que
je connaisse le pid du processus que j'ai lancer. Or pour lancer le processus j'uilise system() qui ne me renseigne pas sur ce pid.
 
Je cherche donc une fonction qui pourrait satisfaire mes besoins.
 
Merci

mood
Publicité
Posté le 22-02-2005 à 17:49:11  profilanswer
 

n°990190
Taz
bisounours-codeur
Posté le 22-02-2005 à 18:18:59  profilanswer
 

mouahahah
 
fais un fork()

n°990244
totalchuck
Posté le 22-02-2005 à 18:53:05  profilanswer
 

[quote=990190,0,2,72553]mouahahah
 
fais un fork()[/quote]
 
j'ai déjà essayer d'utiliser fork pour récuperer le pid du fils de mon application.
Le code ci dessous devait lancer emacs, une fois qu'il est lancer j'appuy sur une touche et il doit fermer emacs.
Mais ça marche pas.
 

Code :
  1. pid_t p;
  2. system("emacs -r &" );
  3. p = fork();
  4. getchar();
  5. kill(p, SIGKILL);

n°990250
Taz
bisounours-codeur
Posté le 22-02-2005 à 18:57:14  profilanswer
 

n'importe quoi ...
 
man fork

n°990318
moi23372
Posté le 22-02-2005 à 19:37:23  profilanswer
 

oui la fonction fork te renvoit le pid...
 
pour savoir le pid d'un fils, il n'y a que ça que je vois, sinon pour savoir le pid du programme en cours, c'est GetPid() tout simplement, mais ici ça ne t'avancera a rien...
 
 
#include <unistd.h>
 
prototype: pid_t fork(void );


Message édité par moi23372 le 22-02-2005 à 19:38:35
n°990454
minimoke
beep beep
Posté le 22-02-2005 à 21:02:54  profilanswer
 

mais sa marchera jamais ton truc. La fonctions systeme est independante du processus courrant et de toutes les facons quand tu tapperas une touche c emacs qui va l'interpreter. Fait un man system.


---------------
  ____
n°990461
Tarabiscot​e
Posté le 22-02-2005 à 21:05:05  profilanswer
 

Aller petite aide, déjà il faut tester après le fork si on est dans le père ou le fils (fork renvoie 0 pour le père)
 
Ensuite remplacer le fils par l'application à lancer (grâce à une des commandes exec)

n°990520
Sve@r
Posté le 22-02-2005 à 21:48:45  profilanswer
 

[quote=990244,0,3,51435]j'ai déjà essayer d'utiliser fork pour récuperer le pid du fils de mon application.
Le code ci dessous devait lancer emacs, une fois qu'il est lancer j'appuy sur une touche et il doit fermer emacs.
Mais ça marche pas.
[/quote]
 
Je vois pas trop le pourquoi tu lances "emacs" (programme intéractif) en tâche de fond mais voici un exemple qui t'expliquera comment fonctionne le fork (je la tape de tête alors si j'oublie un ou 2 headers faut pas m'en vouloir

Code :
  1. #include <sys/types.h>
  2. #include <stdio.h>
  3. #include <signal.h>
  4. main()
  5. {
  6.     pid_t pid;              // N° du processus créé
  7.     // Création et vérification du fork
  8.     switch(pid=fork())
  9.     {
  10.         case (-1): // Erreur de création
  11.             fprintf(stderr, "Erreur de création du fork - %s\n", strerror(errno));
  12.             break;
  13.          case 0: // Ici on est dans le fils
  14.             system("emacs -r" )
  15.             exit(0);
  16.         default: // Ici on est dans le père, et "pid" = pid du fils
  17.              printf("Mon programme a lancé emacs dans le pid %d\n, pid);
  18.              // Attente de quelques secondes
  19.              sleep(10);
  20.              // On tue le fils
  21.              kill(pid, SIGTERM);
  22.      }
  23.      // Ici, si le fils n'est pas mort (exit, kill), il est alors toujours actif et ce code sera exécuté par le père et le fils
  24.      printf("Fin du programme\n" );
  25. }


n°990541
Taz
bisounours-codeur
Posté le 22-02-2005 à 22:05:01  profilanswer
 

#
#          case 0: // Ici on est dans le fils
#             system("emacs -r" )
#             exit(0);
 
 
n'importe quoi

n°990593
Elghinn42
Posté le 22-02-2005 à 22:53:18  profilanswer
 

[quote=990541,0,9,72553]#
#          case 0: // Ici on est dans le fils
#             system("emacs -r" )
#             exit(0);
 
 
n'importe quoi[/quote]
T'as beaucoup de vocabulaire toi  :sweat:  
 
Sinon, pour le fils, moi j'aurai plutot utilisé un exec


---------------
"le logiciel libre est une question de liberté, pas de prix" - Richard M. Stallman - (http://www.gnu.org/philosophy/why-free.fr.html)
mood
Publicité
Posté le 22-02-2005 à 22:53:18  profilanswer
 

n°990600
Taz
bisounours-codeur
Posté le 22-02-2005 à 22:59:03  profilanswer
 

ben évidemment !

n°990664
totalchuck
Posté le 22-02-2005 à 23:43:13  profilanswer
 

C'est bon j'ai réussi j'utilise execlp à la place de system et ça marche.
 
Merci beaucoup

n°990888
Sve@r
Posté le 23-02-2005 à 10:49:07  profilanswer
 

Taz a écrit :

#
#          case 0: // Ici on est dans le fils
#             system("emacs -r" )
#             exit(0);
 
 
n'importe quoi


 
Evidemment, comme d'hab tu regardes la forme et non le fond !!!
Alors je t'explique: Le fond de ce petit source tout simple était d'expliquer le principe du fork. Où est le père, où est le fils. Pas de faire une appli avec multi-processus et recouvrement.
T'as toujours pas changé toi !!!

n°990910
Taz
bisounours-codeur
Posté le 23-02-2005 à 10:56:50  profilanswer
 

désolé, mais fork+system, c'est vraiment une hérésie totale, c'est pathétiquement comique

n°991729
Sve@r
Posté le 23-02-2005 à 19:30:27  profilanswer
 

Taz a écrit :

désolé, mais fork+system, c'est vraiment une hérésie totale, c'est pathétiquement comique


 
Mais dit-moi, tu as vu la gueule de tes contributions ? Un type pose une question et qu'est-ce que tu fais ?
1) tu te fous de sa gueule
2) tu lui envoies "fais un fork" sur le même ton que tu aurais dit "va te faire foutre"
Tu crois vraiment que ce genre de contribution va l'aider en quoi que ce soit si tu lui expliques pas un peu comment fonctionne le fork ? Qu'est-ce que tu crois que ta contrib apporte (à part montrer à tout le monde à quel point tu es un pauvre type qui cherche à s'élever en écrasant les autres au lieu de chercher à s'élever avec les autres) ?
 
D'ailleurs, quand je parle de contribution, c'est un bien grand mot. En fait, je ne te vois pas trop poster quoi que ce soit de réellement concret à part tes sentences gratuites mais sans valeur. C'est vrai que les rares fois où je t'ai vu expliquer des trucs tu t'es largement vautré (http://forum.hardware.fr/forum2.ph [...] 40#t895952) et je comprend que tu évites de montrer tes lacunes.
 
Alors si tu sais rien faire d'autre que critiquer, juger, condamner et exécuter; arrête de poster. A ce moment là tu seras vraiment d'une aide précieuse pour tous.

n°991811
++fab
victime du syndrome IH
Posté le 23-02-2005 à 20:35:25  profilanswer
 

Sve@r a écrit :

...(à part montrer à tout le monde à quel point tu es un pauvre type qui cherche à s'élever en écrasant les autres au lieu de chercher à s'élever avec les autres) ?...


 
Je pense plutot que Taz en fait un max pour tirer tout le monde vers le haut, certes à grand coups de pompe dans le derch, mais ça fait pas de mal.  
Et puis ça donne un certain charme aux cat C et surtout C++, certaines baches sont quand meme bien poilante pour peu qu'on les prenne au second degré ...  :D  

n°991862
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-02-2005 à 21:14:41  profilanswer
 

Sve@r a écrit :

<...> D'ailleurs, quand je parle de contribution, c'est un bien grand mot. En fait, <...>


Peace and love.
 
Je pense que les contributions de Taz sont bonnes dans l'ensemble, (il nous arrive tous de nous tromper), et j'aime assez sa façon de secouer les neurones des gars qui pensent que tout doit leur tomber tout cuit dans le bec ... C'est mon avis et je le partage...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°993015
Elghinn42
Posté le 24-02-2005 à 22:27:44  profilanswer
 

Sve@r a écrit :

Tu crois vraiment que ce genre de contribution va l'aider en quoi que ce soit si tu lui expliques pas un peu comment fonctionne le fork ?


Heu...Taz n'est tout simplement pas du genre à faire tout le boulot pour les autres. Et dans un sens, je suis d'accord avec lui. Parce que c'est pas compliqué de faire un "man fork"... Faudrait voir à pas exagéré. Surtout qu'en plus y'a un exemple d'utilisation dedans. Et puis fork est très bien documenté sur le net (une petite recherche avec google et c'est bon).
 
Et puis sans vouloir en rajouter une couche, la question posée aurait pu être résolu en faisant une recherche sur le net...Ceci expliquant celà, l'attitude de Taz est plus compréhensible (attention, je n'ai pas dit que j'y adhérai :þ)


---------------
"le logiciel libre est une question de liberté, pas de prix" - Richard M. Stallman - (http://www.gnu.org/philosophy/why-free.fr.html)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C Ansi] Obtenir le pid d'un processus

 

Sujets relatifs
[C Ansi] Thread POSIX problème de synchronisation[C] Communication processus sous windows[Resolu]
[ Shell ] Obtenir la date du lendemain ?[C++ sous Windows] - Killer un processus
[ansi] utilisation de types ou structures définis ailleurs ...synchronisation de processus sans lien de parenté
Convertir format ANSI en DOSgestion des signaux processus
obtenir les elements qui sont affiches dans le prompt[C Ansi] Affichage dynamique en console
Plus de sujets relatifs à : [C Ansi] Obtenir le pid d'un processus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR