Hello world,
J'ai honte de vous poser une question qui m'a l'air vraiment aussi conne (alors que j'ai cherché !), mais comment attendre l'arrêt d'un processus quelconque à partir de son pid?
(waitpid, wait, wait4 et wait3 ne marchant que sur un processus fils)
(Autrement que for(;open("/proc/" + pid) != ENOENT;); s'il vous plait ;))
# ptrace ?
Posté par daggett . Évalué à 4.
C'est ce qu'utilisent strace et gdb pour tracer des processus deja lancés identifiés par leur pid.
PTRACE_ATTACH:
Attaches to the process specified in pid, making it a traced
"child" of the current process;
Une fois "rattaché" à ton process, les wait() devraient marcher. Cependant attention, tu vas aussi sans doute recevoir les notifications de tous les signaux que reçoit le process, qui est alors stoppé en attendant que tu fasses ton boulot de debuggueur, et il semble qu'il faille le redémarrer "à la main" à chaque fois (indiqué dans le man).
De plus wait() ne marchera plus pour le vrai parent ; ça risque donc de casser des trucs.
# kill ?
Posté par jlh . Évalué à 3.
fonction kill(pid, signal) (voir man 2 kill).
Plus de détail là :
http://www.linuxjunkies.org/html/Process-Monitor-HOWTO.html
# Même problème
Posté par Force4 . Évalué à 1.
J'ai le même problème...
J'ai d'abord procédé comme ça :
while (!kill(pid, 0));
Ca marche mais quand je fais top, je vois ça :
PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
16334 user 64 0 16K 408K RUN 0:43 99.02% 99.01% my_wait
Quelqu'un saurait-il m'expliquer à quoi correspondent précisément ces deux champs (WCPU & CPU) et pourquoi ces valeurs sont si élevées ?
Merci d'avance !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.