[C Ansi] Obtenir le pid d'un processus

Obtenir le pid d'un processus [C Ansi] - C - Programmation

Marsh Posté le 22-02-2005 à 17:49:11    

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

Reply

Marsh Posté le 22-02-2005 à 17:49:11   

Reply

Marsh Posté le 22-02-2005 à 18:18:59    

mouahahah
 
fais un fork()

Reply

Marsh Posté le 22-02-2005 à 18:53:05    

[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);

Reply

Marsh Posté le 22-02-2005 à 18:57:14    

n'importe quoi ...
 
man fork

Reply

Marsh Posté le 22-02-2005 à 19:37:23    

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
Reply

Marsh Posté le 22-02-2005 à 21:02:54    

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.


---------------
  ____
Reply

Marsh Posté le 22-02-2005 à 21:05:05    

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)

Reply

Marsh Posté le 22-02-2005 à 21:48:45    

[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. }


Reply

Marsh Posté le 22-02-2005 à 22:05:01    

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

Reply

Marsh Posté le 22-02-2005 à 22:53:18    

[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)
Reply

Marsh Posté le 22-02-2005 à 22:53:18   

Reply

Marsh Posté le 22-02-2005 à 22:59:03    

ben évidemment !

Reply

Marsh Posté le 22-02-2005 à 23:43:13    

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

Reply

Marsh Posté le 23-02-2005 à 10:49:07    

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 !!!

Reply

Marsh Posté le 23-02-2005 à 10:56:50    

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

Reply

Marsh Posté le 23-02-2005 à 19:30:27    

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.

Reply

Marsh Posté le 23-02-2005 à 20:35:25    

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  

Reply

Marsh Posté le 23-02-2005 à 21:14:41    

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/
Reply

Marsh Posté le 24-02-2005 à 22:27:44    

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)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed