Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

211
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda