es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se pueden eliminar todos los procesos secundarios utilizando SIGTERM.

Mi programa tiene el siguiente diseño padre-hijo:

int main() {

std::vector<pid_t> kids;
pid_t forkid = fork();

if (forkid == 0) {
//proceso hijo
    pid_t fork2 = fork() 
    if (fork2 == 0) {
      // proceso hijo 

     }else {
      //padre
      kids.push_back(fork2);
     }
}else {
// código aquí
   kids.push_back(forkid);
}

// No se mata el proceso fork2, solo se termina el primer proceso (forkid)

for (pid_t k : kids) {
    int status;
    kill(k, SIGTERM);
    waitpid(k, &status, 0);
}


  }

No puedo matar el proceso hijo (fork2) – el primer proceso se termina. El vector kids parece contener sólo el id del proceso del primer proceso. Nunca obtiene el pid del proceso hijo. ¿Qué estoy haciendo mal aquí? Cualquier ayuda será apreciada. Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el código dado, parece que el vector kids solo almacena el identificador de proceso del primer proceso hijo (forkid). Esto se debe a que la instrucción kids.push_back(fork2) se ejecuta solo en el bloque else del segundo fork (if (fork2 == 0)).

    Para almacenar el identificador de proceso del segundo proceso hijo (fork2), necesitamos mover la instrucción kids.push_back(fork2) dentro del bloque if del segundo fork, de esta manera:

    if (forkid == 0) {
        //proceso hijo
        pid_t fork2 = fork();
            if (fork2 == 0) {
            // segundo proceso hijo
             } else {
            // primer proceso hijo
              kids.push_back(fork2);
             }
        }else {
        // proceso padre
           kids.push_back(forkid);
        }
    

    Esto agregará el identificador de proceso del segundo proceso hijo al vector kids, lo que nos permitirá finalizar ambos procesos hijo usando la función kill() dentro del ciclo for.

Comments are closed.