On Thu, 2 Sep 2004, Christal wrote: > Hola a todos, > > Estoy teniendo un problema con un proceso que ejecuto y no se como > arreglarlo. > Trabajo con Mandrake 9.1. > Tengo un programa hecho en C que simplemente va revisando sus entradas por > el puerto serie y hace lo que tenga que hacer dependiendo de lo que lea por > el puerto... para hacer esto tengo que estar revisando constantemente el > puerto, asi que en la funcion principal del programa (main) tengo un bucle > que no sale hasta que no pulse "ESC". > Hasta aqui no hay problemas porque el programa hace todo lo que tiene que > hacer. El problema viene cuando, por ejemplo, llevo una semana trabajando > con el, que el programa imprime in "killed" por pantalla y finaliza. > Aqui es donde no se que debo hacer exactamente, pues no se como controlarlo. > He hecho un "top" para mirar el estado de la memoria y muestra que el > programa usa un 62% de CPU y un 40% de MEM. > Lo que estoy intentando es hacer un sync cada hora (lo he puesto en el cron) > para que cada hora se resincronice la swap, a ver si eso afecta en algo y > puede ayudarle a recuperar algo de memoria... Tambien estoy intentando > iniciar el proceso con el comando "nice" para darle mas o menos prioridad al > proceso, a ver si asi consigo que no consuma tanto... ahora lo he arrancado > como "nice -n -19 ./comunicacion" para ver si dandole la maxima prioridad > consigo que no consuma tanto. Pero no se si asi esta bien o deberia de darle > la menor prioridad... > La cuestion es que de momento he revisado el top y ahora, que lleva 1h en > marcha, consume 60-63% de CPU y 1.8% de MEM. Pero no se si ira incrementando > o con esto lo podre controlar... > > Alguien sabe de esto? Cual puede ser una solucion? Lo estoy haciendo bien? > Si alguien necesita mas datos o lo que sea, por favor, que me lo pida que > gustosa se lo pasare! > > Muchisimas gracias de antemano!
Sin los fuentes todo son congeturas. Quizás tu programa tenga un desequilibrio en la gestión de la memoria dinámica. malloc() <-> free() Puedes comprobar la cantidad disponible de memoria usando mallinfo(). Haz trazas dentro del bucle que mencionabas. #include <malloc.h> struct mallinfo mi for (...;...;....){ ....(); ....(); /* traza */ mi = mallinfo(); printf("%d\n", mi.arena } Posiblemente comprobaras que poco a poco vas perdiendo memoria. -- Un saludo Antonio Castro /\ /\ \\W// _|0 0|_ +-oOOO-(___o___)-OOOo---------------------+ | . . . . U U . Antonio Castro Snurmacher | | . . . . . . . [EMAIL PROTECTED] | +()()()---------()()()--------------------+