COMO MATAR PROCESOS EN C++?

Hola,me gustaría que alguien me dijiese como matar procesos en c++,me han dicho usando exit y wait,pero no consigo entenderlo...si alguien me puede poner algún ejemplo o algún tutorial en castellano que se entienda,,,ya que he leido muchas cosas y en castellano no las entiendo....

Os lo agradecería mucho...
Muchas Gracias.
¿Un proceso que has creado en ese programa mediante fork o un proceso cualquiera?
breack???

jeje, no se de c++...pero mejro que nada...
son procesos que he creado con fork(),,,por favor necesito ayuda seria...
Con exit lo que haces es terminar un proceso y enviar el estado al padre, que lo puede recoger con wait. Para matar un proceso lo que se hace es enviarle una señal SIGKILL. Si no has dado señales todavía pues tendrás que salir con exit, pero así no se le mata sino que termina por programación (voluntariamente).
yo es que quiero terminarlo con exit y wait,me han dicho que tengo que hacerlo asi...pero no se como funcionan ninguno de los dos....
Pues exit, en cualquier momento del programa, termina el proceso. Sólo tienes que hacer un exit(0), 0 es el estado normal, puedes poner cualquier otro, lo que ahora no recuerdo es como se comprobaba el estado de salida. wait(pid) espera a que finalice (haga exit voluntariamente o pete) el proceso hijo indicado por pid y continúa. wait(NULL) espera a que termine cualquier hijo. wait devuelve -1 si no hay ningún hijo.

Un ejemplillo simple (en C), hace un fork, el padre hace un wait y el hijo espera un poco para terminar, entonces el padre muestra el pid del hijo que ha terminado.

#include <sys/types.h>
#include <stdio.h>

main()
{
   int pid;

   if ( fork() == 0){            /* hijo */
      fprintf(stdout, "hijo %d\n", getpid());
      sleep(3);
      exit(0);                     /* termina */
   }else{                        /* padre */
      fprintf(stdout, "padre %d\n", getpid());
      pid = wait(NULL);            /* espera que finalice cualquier hijo */
      fprintf(stdout, "fin del hijo %d\n", pid);
   }
   exit(0);
}


Por cierto, creo que lo que digo es correcto pero puede que meta la pata en alguna cosa, no toco procesos hace mucho tiempo.
Muchas gracias por contestar pero lo siento mucho no se como aplicar eso a mi programa y no entiendo porque entra en el if y tambien en el else? no lo llego a entender...
Mi programa está echo de forma recursiva y no se como al final del todo matar los procesos...me está siendo realmente dificil realizarlo....
Bufff, menudo lío estamos montando aquí... Vamos a ver, pacorubio77, puedes explicarnos de qué va tu programa y qué pretendes hacer con él? Realmente quieres matar un proceso o solamente detener el desarrollo de una función?

Porque eso de los procesos se da en Sistemas Operativos de la facultad, y vaya, con un buen libro de SO (el de los dinosaurios ·$%&, por ejemplo), podrías enterarte mejor tal vez.
Umm, a ver, ahora que tengo tiempo.

fork() devuelve un entero, que será 0 para el hijo y el pid del hijo para el padre.

if ( fork() == 0){
   /* hijo */
}else{
   /* padre */
}


Es equivalente a:

pid = fork()
if ( pid == 0){
   /* hijo */
}else{
   /* padre */
}


Solo que en el primer caso ahorro una variable que no voy a usar más.

Me imagino que con eso entenderás el if.

Ahora, para terminar (que no matar) un proceso antes de que llegue al final, lo que se hace es exit.

El wait se usa por el proceso padre para esperar a que finalice el hijo y, además, se evita que el hijo se quede como un proceso zombie (esto es, programa terminado pero a la espera de que el padre recoja la terminación del hijo). No sé si entenderás esto, si no lo has dado.

Y sí, un librillo te vendría bien, o los apuntes de sistemas operativos de alguna universidad.
Muchas gracias por contestar...en un programita como me indicastes se puede entender..pero el mio es un programa recursivo y no consigo sacar los resultados...ya que lo he echo de manera recursiva...entonces si al final del todo pongo un wait(&estado)...no me termina los procesos de todos......estoy intentando entenderlo..y para ello me estoy leyendo muchos apuntes...y si recurro al foro es para ayuda,pero no quiere decir que esté esperando la respuesta,yo intento cosas por mi cuenta.
Aprender se aprende remangandote y tirándole.
10 respuestas