Me hicieron estas preguntas en una entrevista (entrevista en C++). No estoy seguro de las respuestas y me gustaría saber más.
- ¿Puede el hilo crear otro hilo?
- ¿Puede el proceso crear otro proceso?
- ¿Puede el hilo crear un proceso?
- ¿Puede el proceso crear un hilo?
Respuesta1
Sí, un hilo puede crear otro hilo. En UNIX esto se hace (en el nivel bajo) a través del
clone()
comando, y en el nivel más alto, en codificación C, a través de lapthread
biblioteca.Sí, un proceso puede iniciar otro proceso. Esto sucede todo el tiempo. El tipo de proceso más común -> proceso es a través de
fork()
.Esto, no estoy seguro. En este punto me gustaría mencionar que hay dos tipos principales de subprocesos: subprocesos a nivel de kernel y subprocesos a nivel de usuario. Los subprocesos a nivel de kernel (en general) están vinculados a procesos principales, mientras que los subprocesos a nivel de usuario son generados por estos procesos (es decir, mediante subprocesos a nivel de kernel).Hay excepcionesQuizás alguien pueda dar una mejor respuesta al hilo -> proceso.
Sí. Ver el comentario en 3.
Respuesta2
Cualquier código que se ejecute puede hacer cualquier cosa.
Dicho esto, los procesos no son código: los subprocesos son las cosas que realmente se ejecutan y los procesos son sus entornos circundantes. Por tanto (1) y (3) son verdaderas y el resto falsas.
Respuesta3
Sí a todo.
Puede que le ayude comprender que los procesos en realidad no se "ejecutan" en Windows. Los hilos corren. Cada proceso tiene al menos un hilo. Entonces, las verdaderas preguntas son:
- ¿La ejecución de código puede crear otro hilo? Sí.
En Windows, esto se hace con la API CreateThread o una de sus primas. La versión larga sería "¿puede el código que se ejecuta en el contexto de un hilo crear otro hilo?" Claro, pero desdetodoEl código se ejecuta en el contexto de algún hilo, no hay necesidad de palabrería adicional. CreateThread toma un argumento que es la dirección de la función que se convierte en la función de nivel superior para el nuevo hilo, esencialmente el "principal" del nuevo hilo.
- ¿La ejecución de código puede crear otro proceso? Sí.
De manera similar a lo anterior: cuando se ejecuta en el contexto de un subproceso, también se ejecuta en el contexto del proceso propietario del subproceso. Entonces, sí, existe una API CreateProcess y puedes usarla para crear otro proceso.
También estarás, automáticamente y sin mayor esfuerzo, creando un hilo en tu nuevo proceso... porque (dado que los procesos no se ejecutan) un proceso sin un hilo no puede hacer nada. Ese primer hilo del nuevo proceso comenzará a ejecutar la función "principal" del programa: main() o WinMain() o lo que sea.