Exit of the last `clone(CLONE_VM)` child ends the parent process
Los mantenedores suelen responder en 3 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- c, linux
- Área
- operating-systems
Línea de trabajo
Start in src/runtime/forkipc.c at vm_clone_thread_run around line 1446 and read the proc_request_exit_group call and its comment. Compare the clone child’s exit handling with the Linux behavior described in the issue, including how the parent is woken and how waitpid receives the child status. Done means the parent remains alive to wait for the child and return its own exit code.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
When the last clone(CLONE_VM) child (without CLONE_THREAD) of an elfuse process exits, vm_clone_thread_run (src/runtime/forkipc.c:1446, at 173b23b) calls proc_request_exit_group with the child's exit code. The parent ends with it, even when the parent is still running and has more work to do.
On Linux the child is a separate process. Its exit raises SIGCHLD in the parent, waitpid returns its status, and the parent keeps running.
Reproduce (static aarch64 binary):
#define _GNU_SOURCE
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
static volatile int go;
static int child(void *a) { (void) a; while (!go) usleep(1000); return 0; }
int main(void) {
char *stk = malloc(1 << 16);
pid_t c = clone(child, stk + (1 << 16), CLONE_VM | SIGCHLD, NULL);
go = 1;
int st;
pid_t w = waitpid(c, &st, 0);
dprintf(2, "waited %d st=%x\n", w, st);
return 3;
}
- Linux 6.18.57 (qemu reference VM): prints
waited <pid> st=0, exits 3. - elfuse at 173b23b: prints nothing after the clone and exits 0, the child's code.
The comment at the call says the exit_group is there so that a main thread blocked in futex_wait or its run loop wakes up. To match Linux, that main thread would need another way to wake, and the parent would need to exit only through its own exit or exit_group.
test-proc-limits works around this in #448 by running its VM-clone check in a fork child.
Checked, not affected: posix_spawn, which glibc implements with clone(CLONE_VM | CLONE_VFORK). A static glibc guest that spawns busybox true, waits for it and returns 3 prints spawn rc=0 waited <pid> st=0 and exits 3, under elfuse at 173b23b and on Linux 6.18.57 alike.
- Lenguaje dominante
- C
- Estrellas
- 275
- Forks
- 29
- Merge medio
- 2 d 22 h
- PR fusionados (30 d)
- 18
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de sysprog21/elfuse
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 3 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 3 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 3 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 54/100
Los mantenedores suelen responder en 3 días
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
Los mantenedores suelen responder en 3 días
Todos los issues de sysprog21/elfuse
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
sumatrapdfreader/sumatrapdf#6403 ·
-
followup
Dificultad 1/5 Menos de una hora Aptitud para principiantes 83/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
oetiker/rrdtool-1.x#1392 ·
-
bottomless: finished S3 upload tasks are never reaped, so sqld memory grows by ~10 KB per WAL batchAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
tursodatabase/libsql#2298 ·
-
enhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100