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