w: exits with error when utmp session references a missing tty device
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 72/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- linux, rust
- Área
- cli, operating-systems
Línea de trabajo
Comienza con tests/by-util/test_w.rs y reproduce el fallo usando el registro utmp obsoleto proporcionado; después ejecuta la prueba específica o cargo test. Sigue la ruta del comando w que informa del dispositivo tty ausente y verifica que las sesiones que hacen referencia a dispositivos inexistentes ya no hagan que w termine con un error, mientras la prueba pasa en ubuntu-latest.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
On Linux, w can fail with exit code 1 when /var/run/utmp (or /run/utmp) contains a user session whose tty device does not exist under /dev/.
This is visible in CI (cargo test on ubuntu-latest) and can also happen on real systems when utmp records reference stale or non-device tty names (e.g. certain pts/N, seat names, or leftover entries).
This fails on ubuntu-latest in GitHub Actions, while the same test often passes locally when no utmp records are present.
test test_watch::test_valid_interval_comma ... ok
failures:
---- test_w::test_option_short stdout ----
bin: "/home/runner/work/procps/procps/target/debug/procps"
run: /home/runner/work/procps/procps/target/debug/procps w --short
thread 'test_w::test_option_short' (11461) panicked at tests/by-util/test_w.rs:44:42:
Command was expected to succeed. code: 1
stdout =
stderr = w: failed to fetch user info: No such file or directory (os error 2)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
test_w::test_option_short
test result: FAILED. 221 passed; 1 failed; 1 ignored; 0 measured; 0 filtered out; finished in 3.90s
error: test failed, to rerun pass `-p procps --test tests`
Error: Process completed with exit code 101.
Local Reproduction
Create a utmp record with a user session pointing at a non-existent tty:
python3 << 'PY'
import ctypes, os, time
class ExitStatus(ctypes.Structure):
_fields_ = [("e_termination", ctypes.c_short), ("e_exit", ctypes.c_short)]
class Utmpx(ctypes.Structure):
_fields_ = [
("ut_type", ctypes.c_short), ("_pad", ctypes.c_short),
("ut_pid", ctypes.c_int), ("ut_line", ctypes.c_char * 32),
("ut_id", ctypes.c_char * 4), ("ut_user", ctypes.c_char * 32),
("ut_host", ctypes.c_char * 256), ("ut_exit", ExitStatus),
("ut_session", ctypes.c_int), ("ut_tv_sec", ctypes.c_long),
("ut_tv_usec", ctypes.c_long), ("ut_addr_v6", ctypes.c_int * 4),
("reserved", ctypes.c_char * 20),
]
u = Utmpx()
u.ut_type = 7 # USER_PROCESS
u.ut_pid = os.getpid()
u.ut_line = b"no-such-tty-ci"
u.ut_user = b"testuser"
u.ut_tv_sec = int(time.time())
open("/tmp/fake-ci.utmp", "wb").write(bytes(u))
print("wrote /tmp/fake-ci.utmp")
PY
sudo cp /tmp/fake-ci.utmp /run/utmp
cargo run -q w --short
echo "exit code: $?"
sudo rm -f /run/utmp
- Lenguaje dominante
- Rust
- Estrellas
- 117
- Forks
- 41
- Merge medio
- 1 d 41 min
- PR fusionados (30 d)
- 20
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 uutils/procps
-
hugetop: print human readable sizes by defaultPosiblemente ocupada @Franklin-Qi la tomó hace 166 días. Abiertohugetop
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
vmstat: -s prints memory in 1000-byte units and leaves SReclaimable out of swap cachePosiblemente ocupada @SichenLiang la tomó hace 7 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
Los mantenedores suelen responder en 1 día
-
enhancement good first issue
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
uutils/procps#665 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Los mantenedores suelen responder en 1 día
Todos los issues de uutils/procps
Issues similares
-
Add MimirAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
slavakurilyak/awesome-ai-agents#759 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
compiler-explorer/compiler-explorer#9272 ·
Los mantenedores suelen responder en 1 día
-
Trash, bin or rubbish?Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 63/100
pop-os/cosmic-files#2117 ·
Los mantenedores suelen responder en 2 días
-
L: java:gradle L: java:maven L: ruby:bundler T: bug 🐞
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
dependabot/dependabot-core#16547 ·
Los mantenedores suelen responder en 1 día
-
bug status:ready-for-test
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
UniClipboard/UniClipboard#1985 · 1 comentario ·
Los mantenedores suelen responder en 1 día