Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Surveiller la vie d'un processus (en C)

20 réponses
Avatar
JKB
Bonjour à tous,

Suite à mes interrogations sur les pipes en C, j'ai un autre petit
truc à vous soumettre... J'ai googlisé, RTFMer sans trop de succès.
Comment puis-je à partir d'un programme écrit en C surveiller qu'un
processus n'est pas mort (en fait, le processus fils généré par le
fork(), pour pouvoir fermer mon pipe() du côté du père.) ?
J'aimerais aussi que ce soit portable...

Cordialement,

JKB

10 réponses

1 2
Avatar
John Mackerel
JKB wrote:
Bonjour à tous,

Suite à mes interrogations sur les pipes en C, j'ai un autre petit
truc à vous soumettre... J'ai googlisé, RTFMer sans trop de succès.
Comment puis-je à partir d'un programme écrit en C surveiller qu'un
processus n'est pas mort (en fait, le processus fils généré par le


Peut être avec un kill 0 ? Le man dit:

If sig is 0, then no signal is sent, but error checking is
still performed.

Désolé, j'ai pas le temps de tester, mes sardines m'appellent...

Avatar
DINH Viêt Hoà

Suite à mes interrogations sur les pipes en C, j'ai un autre petit
truc à vous soumettre... J'ai googlisé, RTFMer sans trop de succès.
Comment puis-je à partir d'un programme écrit en C surveiller qu'un
processus n'est pas mort (en fait, le processus fils généré par le
fork(), pour pouvoir fermer mon pipe() du côté du père.) ?
J'aimerais aussi que ce soit portable...


si tu surveilles le processus, à partir du père, tu as le signal
SIGCHLD qui te dit que le fils est mort.

mais en général, tu ne te prends pas de signal SIGPIPE quand le fils
meurt si tu as ouvert un pipe() pour communiquer avec lui ?

--
DINH V. Hoa,

"tu as bientot 15 ans, faut que tu commences à être autonome" -- jul

Avatar
Eric Jacoboni
JKB writes:

Comment puis-je à partir d'un programme écrit en C surveiller qu'un
processus n'est pas mort (en fait, le processus fils généré par le
fork(), pour pouvoir fermer mon pipe() du côté du père.) ?
J'aimerais aussi que ce soit portable...


Envoyer un kill(pid, 0) ?

--
Éric Jacoboni, né il y a 1406733205 secondes

Avatar
FAb
JKB writes:

Bonjour à tous,

Suite à mes interrogations sur les pipes en C, j'ai un autre petit
truc à vous soumettre... J'ai googlisé, RTFMer sans trop de succès.
Comment puis-je à partir d'un programme écrit en C surveiller qu'un
processus n'est pas mort (en fait, le processus fils généré par le
fork(), pour pouvoir fermer mon pipe() du côté du père.) ?
J'aimerais aussi que ce soit portable...

Cordialement,

JKB


Simple piste à tester mais là je n'ai pas trop le temps.
Quand ton processus cible/fils clamse, le système récupère toutes les ressources
simples dont les descripteurs de fichiers des pipes. Ton processus père recevra
un équivalent de eof sur son pipe.
*À tester* hein...

J'ai joué avec select et plusieurs clients tcp qui y en a un qui disparait comme
un sagouin (le pauvre il a pas aimé le test du kill -KILL) mon serveur fait un
'read' qui retourne 0 bytes.

A+
Fab

Avatar
JKB
Le 17-12-2004, à propos de
Re: Surveiller la vie d'un processus (en C),
Eric Jacoboni écrivait dans fr.comp.os.unix :
JKB writes:

Comment puis-je à partir d'un programme écrit en C surveiller qu'un
processus n'est pas mort (en fait, le processus fils généré par le
fork(), pour pouvoir fermer mon pipe() du côté du père.) ?
J'aimerais aussi que ce soit portable...


Envoyer un kill(pid, 0) ?


Groumphfff... J'ai tout cherché et je l'avais sous les lunettes...
Merci à tous,

JKB


Avatar
John Mackerel
JKB wrote:
Envoyer un kill(pid, 0) ?



Groumphfff... J'ai tout cherché et je l'avais sous les lunettes...


T'as des lunettes maintenant ? C'est pour faire peur aux chats ?


Avatar
Laurent Wacrenier
DINH Viêt Hoà écrit:
mais en général, tu ne te prends pas de signal SIGPIPE quand le fils
meurt si tu as ouvert un pipe() pour communiquer avec lui ?


On a un SIGPIPE quand on essaye d'écrire dans un PIPE et que l'autre
extremité est fermée.

Avatar
Eric Jacoboni
JKB writes:

Envoyer un kill(pid, 0) ?


Groumphfff... J'ai tout cherché et je l'avais sous les lunettes...


Cela dit, comme on l'a dit plus haut, le détournement de SIGCHLD me
semble plus "propre" lorsqu'il s'agit, pour un père, de savoir que son
fils est mort.

--
Éric Jacoboni, né il y a 1406734591 secondes


Avatar
Jogo
Le 17 déc. 2004, JKB a écrit dans fr.comp.os.unix :

Comment puis-je à partir d'un programme écrit en C surveiller qu'un
processus n'est pas mort (en fait, le processus fils généré par le
fork(), pour pouvoir fermer mon pipe() du côté du père.) ?


Lorsque le fils meurt, il envoie un signal SIGCHILD au père. A toi de
l'intercepter (cf kill, trap etc...).

Avatar
JKB
Le 17-12-2004, à propos de
Re: Surveiller la vie d'un processus (en C),
Eric Jacoboni écrivait dans fr.comp.os.unix :
JKB writes:

Envoyer un kill(pid, 0) ?


Groumphfff... J'ai tout cherché et je l'avais sous les lunettes...


Cela dit, comme on l'a dit plus haut, le détournement de SIGCHLD me
semble plus "propre" lorsqu'il s'agit, pour un père, de savoir que son
fils est mort.


Je crois que c'est ce que je vais faire. kill(pid, 0) me renvoie un
code d'erreur non documenté (122 !).

Merci à tous,

JKB



1 2