Pomalé waitpid
Anydot
dfenze na gmail.com
Čtvrtek Prosinec 6 22:59:38 CET 2007
On (06/12/07 18:59), Ladislav Vaiz wrote:
> Ahoj,
> mam program, ktery se forkne a v jeden okamzik musi potomka co nejdrive
> ukoncit. Zajimalo by me, proc se rodic dozvu o ukonceni potomka az 286ms
> od volani exit_group? System mel pri testech load average asi 0.5, ale
> stejne mi to pripadne tak o dva rady pomalejsi, nez bych cekal.
>
>
> parent:
> 18:46:03.148433 kill(6987, SIGINT) = 0
> 18:46:03.151321 write(2, "waiting for speaker pid 6987\n", 29) = 29
> 18:46:03.153225 gettimeofday({1196963163, 153261}, NULL) = 0
> 18:46:03.153295 waitpid(6987, NULL, 0) = 6987
> 18:46:03.435995 --- SIGCHLD (Child exited) @ 0 (0) ---
>
>
> child 6987:
> 18:46:03.087233 write(6,
> "\370\377\370\377\370\377\0\0\0\0\0\0\10\0\0\0\10\0\10\0"..., 1280) = 1280
> 18:46:03.149000 --- SIGINT (Interrupt) @ 0 (0) ---
> 18:46:03.149637 exit_group(0) = ?
>
> Druhý dotaz: jak zajistím spolehlivé ukončení potomků po ukončení
> rodiče? Pripadne mi, ze setpgrp() nekdy nezafunguje, ale priznam se, ze
> jsem to nezkoumal do detailu.
>
> Dík Láďa
dd,
u me to vychazi na 3ms: (strace -tt -f ...)
22:57:43.852401 clone(Process 16006 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7d8b6f8) = 16006
[pid 16005] 22:57:43.853200 wait4(-1, Process 16005 suspended
<unfinished ...>
[pid 16006] 22:57:43.854411 exit_group(0) = ?
Process 16005 resumed
Process 16006 detached
22:57:43.854935 <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 16006
testovaci program:
int main(int argc, char **argv)
{
int status;
if (fork())
wait(&status);
else
exit(0);
}
--
Premysl "Anydot" Hruby >> http://na.srck.net <<
Další informace o konferenci Linux