Creo un proceso hijo usando un fork()
. ¿Cómo puede el proceso principal matar al proceso secundario si el proceso secundario no puede completar su ejecución en 30 segundos? Quiero permitir que el proceso hijo se ejecute hasta 30 segundos. Si lleva más de 30 segundos, el proceso principal lo matará. ¿Tienes alguna idea para hacer eso?¿Cómo matar un proceso secundario por el proceso principal?
Respuesta
Enviar un SIGTERM o un SIGKILL a ella:
http://en.wikipedia.org/wiki/SIGKILL
http://en.wikipedia.org/wiki/SIGTERM
SIGTERM es educado y permite que el proceso de limpieza antes de que salga, mientras que, SIGKILL es para cuando no lo hará escuchar> :)
Ejemplo de la cáscara (página hombre: http://unixhelp.ed.ac.uk/CGI/man-cgi?kill)
kill -9 pid
En C, puede hacer lo mismo usando la llamada al sistema kill:
kill(pid, SIGKILL);
Consulte la siguiente página del manual: http://linux.die.net/man/2/kill
En el proceso padre, tenedor() el valor devuelto es el ID del proceso hijo. Rellene ese valor en alguna parte para cuando necesite terminar el proceso secundario. fork() devuelve cero (0) en el proceso hijo.
Cuando necesite finalizar el proceso hijo, use la función kill (2) con la ID del proceso devuelta por fork(), y la señal que desea entregar (por ejemplo, SIGTERM).
Recuerde llamar a wait() en el proceso hijo para evitar cualquier zombie persistente.
intentar algo como esto:
#include <signal.h>
pid_t child_pid = -1 ; //Global
void kill_child(int sig)
{
kill(child_pid,SIGKILL);
}
int main(int argc, char *argv[])
{
signal(SIGALRM,(void (*)(int))kill_child);
child_pid = fork();
if (child_pid > 0) {
/*PARENT*/
alarm(30);
/*
* Do parent's tasks here.
*/
wait(NULL);
}
else if (child_pid == 0){
/*CHILD*/
/*
* Do child's tasks here.
*/
}
}
- 1. ¿Cómo matar un proceso C#?
- 2. ¿Cómo matar un proceso nohup?
- 3. Iniciar un nuevo proceso y matar el proceso actual
- 4. ¿Cómo matar un proceso en cygwin?
- 5. ¿Cómo matar un proceso abierto en node.js?
- 6. ¿Cómo devuelve fork() para el proceso secundario
- 7. Cómo matar un proceso de WiX
- 8. Cómo sincronizar la ejecución del proceso principal/secundario?
- 9. ¿Cómo matar un proceso en MacOS?
- 10. NodeJS: proceso del nodo secundario?
- 11. Leiningen: ¿cómo matar el proceso del niño?
- 12. Adjunte el proceso secundario al depurador
- 13. Cómo matar un proceso secundario después de un tiempo de espera determinado en Bash?
- 14. GDB backtrace en el proceso secundario
- 15. matar a un proceso en bash
- 16. Matar proceso abandonada en Heroku
- 17. Cómo detener un servidor node.js sin matar el proceso?
- 18. ¿Matar un proceso en ejecución en ColdFusion?
- 19. matar a un proceso iniciado con popen
- 20. Guardar gmon.out antes de matar un proceso
- 21. Cómo termina el proceso secundario cuando finaliza el proceso primario en C#
- 22. ¿matar el subproceso cuando se mata el proceso de python?
- 23. ¿Cómo se genera un proceso secundario en Ruby?
- 24. Cómo matar un proceso en Java, dado un PID específico
- 25. cómo enviar un mensaje al proceso principal
- 26. ¿Matar el proceso después de un tiempo determinado?
- 27. Matar un proceso desaparecida en el sistema UNIX
- 28. Cómo redirigir el proceso hijo stdout/stderr al proceso principal stdout/stderr en Java?
- 29. Cómo matar el proceso de trazado en R?
- 30. ¿Cómo matar eficazmente un proceso en C++ (Win32)?
¿Es necesario reiniciar la alarma ('alarma (0)') en la parte de los padres si el niño se ejecuta antes de 30 segundos? – miraj
@miraj Hola, ¿tienes la solución para cancelar la alarma? Tengo una pregunta similar, escribo un socket cliente/servidor, el servidor bifurca un proceso secundario cuando el cliente de socket solicita conectarse, pero si el niño no envía ningún mensaje en 1 minuto, el servidor matará el proceso secundario. Si el cliente envía un mensaje al servidor, el temporizador se restablecerá a 1 minuto nuevamente. –