FORUM Syndrome-OC - Jacky-PC


  Programmation


  Autre


  [C++/Linux] Tester si un thread est tjrs en cours d'execution

 




Jeux videos et Lan party : Psyc0 Overclocking : blackwarriors, 1 utilisateur anonyme et 14 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++/Linux] Tester si un thread est tjrs en cours d'execution

n°4736
Deather2
OpenBSD: the way to go!
Posté le 06-01-2005 à 23:06:13  profilanswer
 

Salut :)
J'ai écris un programme qui utilise fork() pour créer un thread fils
Je voudrais savoir, dans le thread père, si le thread fils existe encore, où si il a quitté. (exit())
Comment puis-je faire?
Merci :)
 
Edit: Oarf j'y pense, j'ai qu'a modifier une variable dans le thread fils, elle le sera aussi pour le thread père non ?


Message édité par Deather2 le 06-01-2005 à 23:06:56
mood
Google
Posté le 06-01-2005 à 23:06:13  profilanswer
 

n°4737
nicodache
marmotte en chocolat concept ©
Posté le 06-01-2005 à 23:23:20  profilanswer
 

bah heuuu...
le fils recoit une copie des variables du pere, ou accède direct aux mêmes données ? :heink:


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°4738
Deather2
OpenBSD: the way to go!
Posté le 06-01-2005 à 23:29:56  profilanswer
 

Je crois qu'il reçoit une copie, mais je suis pas sûr.
Je vais tester ;)
Y'a pas une primitive à laquelle on passe en argument le PID du processus à tester (récupéré grâce à la valeur de retour de fork) et qui te retourne true ou false? :D

n°4739
nicodache
marmotte en chocolat concept ©
Posté le 06-01-2005 à 23:37:20  profilanswer
 

Citation :

RETURN VALUE
On success, the PID of the child process is returned  in  the  parent's thread  of execution, and a 0 is returned in the child's thread of execution.  On failure, a -1 will be returned in the parent's context,  no child process will be created, and errno will be set appropriately.


(http://www.linuxforum.com/man/fork.2.php)
 
et puis man kill ;)
 
parce que kill a une option (signal chéplucombien) qui renvoie quelque chose si le programme avec le pid passé en paramèètre a été trouvé, et autre sinon


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°4740
Deather2
OpenBSD: the way to go!
Posté le 06-01-2005 à 23:42:52  profilanswer
 

J'ai rien trouvé sur l'option de kill dont tu parle :/
jvais tester avec une variable globale (fichu msn qui m'empeche de coder :o)

n°4741
nicodache
marmotte en chocolat concept ©
Posté le 07-01-2005 à 00:07:22  profilanswer
 

d'après ce que j'ai lu et que j'ai déduit :
kill renvoie 0 en cas de succès, -1 sinon.
et tu peux killer avec les valeurs  
SIGUSR1   30,10,16     A      User-defined signal 1
SIGUSR2   31,12,17     A      User-defined signal 2
qui semblent ne pas avoir d'action prédéfinie...
 
donc tu tape un kill -s SIGUSR1 pid, et tu regardes si ca fait 0 ou pas :)
 
ddg ou lous pour confirmer que je raconte pas encore des conneries svouplé ;-


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°4742
Deather2
OpenBSD: the way to go!
Posté le 07-01-2005 à 00:14:02  profilanswer
 

Erf faudrait un SIGVOID :P
Merci du conseil, je vais essayer sur mon firefox voar :p

n°4743
Deather2
OpenBSD: the way to go!
Posté le 07-01-2005 à 00:15:47  profilanswer
 

j'ai fais:

Code :
  1. kill -s USR1 `pidof firefox-bin`


ça m'a killé ffox, donc il fais une action ce signal :/
jvais chercher encore

n°4744
nicodache
marmotte en chocolat concept ©
Posté le 07-01-2005 à 00:23:35  profilanswer
 

on me souffle dans mon oreillette d'aller voir du coté de waitpid ;)
 
[edit]et de faire attention à WNOHANG et à ECHILD ;)


Message édité par nicodache le 07-01-2005 à 00:26:58

---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°4745
Deadog
Dain Bramaged
Posté le 07-01-2005 à 03:53:19  profilanswer
 

bah oui, wait
 
ou alors, si tu as le pid tu peux aller regarder dans /proc aussi


Message édité par Deadog le 07-01-2005 à 03:53:28
n°4746
Deadog
Dain Bramaged
Posté le 07-01-2005 à 03:54:25  profilanswer
 

nicodache a écrit :

d'après ce que j'ai lu et que j'ai déduit :
kill renvoie 0 en cas de succès, -1 sinon.
et tu peux killer avec les valeurs  
SIGUSR1   30,10,16     A      User-defined signal 1
SIGUSR2   31,12,17     A      User-defined signal 2
qui semblent ne pas avoir d'action prédéfinie...
 
donc tu tape un kill -s SIGUSR1 pid, et tu regardes si ca fait 0 ou pas :)
 
ddg ou lous pour confirmer que je raconte pas encore des conneries svouplé ;-


 
 
me semble que si le programme en face n'a pas prévu le signal que tu envoie (eg. ne l'écoute pas) alors ça kill

n°4747
Deather2
OpenBSD: the way to go!
Posté le 07-01-2005 à 07:15:49  profilanswer
 

Oké dans /proc y'a un dossier pour chaque processus ayant pour nom son PID.
Le problème c'est que je sais pas tester l'existance d'un dossier en C :D
 
edit:
Mmh wait c'est pas très intéressant car ça bloque mon process en cours. :/


Message édité par Deather2 le 07-01-2005 à 07:24:11
n°4750
CryoGen
Powered by kitkat©
Posté le 07-01-2005 à 09:19:44  profilanswer
 

man 2 kill :o
 
       int kill(pid_t pid, int sig);
 
 If  sig  is 0, then no signal is sent, but error checking is still per-formed.
 
Ca irait pas ca ?


---------------
I am the bone of my sword...
n°4751
Deather2
OpenBSD: the way to go!
Posté le 07-01-2005 à 17:57:49  profilanswer
 

Excuse moi, j'avais pas vu cette partie.
Oui ça devrait aller nickel, je te remercie :)

n°4752
nicodache
marmotte en chocolat concept ©
Posté le 07-01-2005 à 18:06:12  profilanswer
 

Deather2 a écrit :

edit:
Mmh wait c'est pas très intéressant car ça bloque mon process en cours. :/


t'es sur d'avoir regardé le WNOHANG pour waitpid ? ;)


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°4753
Deather2
OpenBSD: the way to go!
Posté le 07-01-2005 à 18:17:36  profilanswer
 

Ah nop j'ai pas vu, mais la fonction que m'a filé CryoGen m'intéresse plus :)

n°4765
Deather2
OpenBSD: the way to go!
Posté le 09-01-2005 à 11:49:39  profilanswer
 

Merci à vous, le kill(pid, 0); marche à merveille :) 0 si il est vivant, -1 si il est mort ;)


Message édité par Deather2 le 09-01-2005 à 11:49:48
n°4816
gimly
Quel pseudo de merde !
Posté le 15-01-2005 à 09:47:26  profilanswer
 

jme demande si j'ai pas déjà vu une fonction du style isalive(pid) ou alors c'est pitet bien en java... jsé pu... enfin ca marche pr toi c le principal ;)

n°4817
Deather2
OpenBSD: the way to go!
Posté le 15-01-2005 à 11:54:24  profilanswer
 

Ben en fait ça a l'air de marcher sous NetBSD, mais pas sous Linux ni sous Solaris. :sweat:
M'bon je verrai plus tard pour l'instant ça m'importe peu ;)

n°4837
Deather2
OpenBSD: the way to go!
Posté le 18-01-2005 à 17:27:31  profilanswer
 

nicodache a écrit :

t'es sur d'avoir regardé le WNOHANG pour waitpid ? ;)


 
J'ai mieux regardé la man page de waitpid, et j'ai sorti ça:

Code :
  1. waitpid(-1, NULL, 0);


Ça m'a l'air de fonctionner à merveille, surtout que mon autre code pourri était un while avec kill(pid, 0); qui bouffait 100% du CPU :lol:
 
Donc merci à tous ;)


Message édité par Deather2 le 18-01-2005 à 17:27:49
mood
Google
Posté le 18-01-2005 à 17:27:31  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Autre


  [C++/Linux] Tester si un thread est tjrs en cours d'execution

 

Hit Parade