Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
¿Mejor manera de monitorear y matar el proceso estancado de otro programa en Linux?

Necesito que mi programa ejecute algún otro programa, pero si el otro programa no regresa dentro de un límite de tiempo, necesito eliminarlo. Se me ocurrió la siguiente solución que parece estar funcionando.

 int main() { int retval, timeout=10; pid_t proc1=fork(); if(proc1>0) { while(timeout) { waitpid(proc1, &retval, WNOHANG); if(WIFEXITED(retval)) break; //normal termination sleep(1); --timeout; if(timeout==0) { printf("attempt to kill process\n"); kill(proc1, SIGTERM); break; } } } else if(proc1==0) { execlp("./someprogram", "./someprogram", "-a", "-b", NULL); } //else if fork failed etc. return 0; }

Necesito que mi programa sea lo más robusto posible, pero soy nuevo en la programación en Linux, por lo que es posible que no esté al tanto de los posibles problemas que pueda tener. Mis preguntas son: 1. ¿Es esta una solución adecuada para este problema en particular o existen mejores métodos? 2. ¿Alguien ve posibles problemas o errores que puedan provocar un comportamiento inesperado o una fuga de recursos del sistema?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

(WIFEXITED(retval)) no devolverá verdadero si una señal elimina el programa (incluido, por ejemplo, un bloqueo debido a una infracción de segmentación).

Probablemente sea mejor verificar si el retorno de waitpid . Eso solo sucederá si el programa se cancela (ya sea voluntariamente o no).

Dependiendo de lo importante que sea asegurarse de que el proceso se haya ido...
Después de matar el proceso con SIGTERM , podría dormir otro segundo más o menos y, si aún no se ha ido, use SIGKILL para estar seguro.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda