Add --clean-processes to remove stale session pid files
Scans the same $XDG_STATE_HOME/slocker-lite/run/ directory as --list-processes and removes every pid file that's genuinely stale. The liveness check and the removal happen atomically per file (the same non-blocking flock() used to test it is held across the remove() call itself), rather than reusing a separate earlier scan, closing the race window where a new session could start in between. Only files actually removed are reported, one line each; sessions still running are left untouched and silently skipped. Refactored list_sessions() and the new clean_stale_sessions() to share a private open_session_file() helper for the open/read-pid/ recover-name step they both need. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gv3s5jckJKzh6JkMoi2Akz
This commit is contained in:
@@ -63,6 +63,7 @@ slocker-lite --list-volumes
|
||||
slocker-lite --delete-volume <name>
|
||||
slocker-lite --delete-volume-full <name>
|
||||
slocker-lite --list-processes
|
||||
slocker-lite --clean-processes
|
||||
slocker-lite -t|--test
|
||||
slocker-lite -h|--help
|
||||
slocker-lite -V|--version
|
||||
@@ -85,6 +86,7 @@ slocker-lite -V|--version
|
||||
| `--delete-volume <name>` | Remove a named volume from the config. The host directory is left untouched. |
|
||||
| `--delete-volume-full <name>` | Like `--delete-volume`, but also recursively deletes the volume's host directory. |
|
||||
| `--list-processes` | List running `--run` sessions found by their pid files under `$XDG_STATE_HOME/slocker-lite/run/`, with their pid, container name, and status (`running` or `exited`). |
|
||||
| `--clean-processes` | Remove stale pid files (see `--list-processes`) left behind by sessions that are no longer running. |
|
||||
| `-t, --test` | Print which `bwrap --unshare-xxx` namespaces the running kernel supports. |
|
||||
| `--log-level <level>` | Set log verbosity (`trace`, `debug`, `info`, `warn`, `error`, `critical`, `off`). |
|
||||
| `-h, --help` | Print usage and exit. |
|
||||
@@ -131,6 +133,9 @@ sudo ./buildDir/slocker-lite -r myimage.tar --user git
|
||||
|
||||
# List currently running (and any leftover, exited) --run sessions
|
||||
./buildDir/slocker-lite --list-processes
|
||||
|
||||
# Remove any leftover, stale pid files
|
||||
./buildDir/slocker-lite --clean-processes
|
||||
```
|
||||
|
||||
## Configuration
|
||||
@@ -177,7 +182,10 @@ be run concurrently without collisions. The file is removed automatically once t
|
||||
run ends; any tool can check whether a session is still alive by attempting the
|
||||
same exclusive, non-blocking `flock()` on its file. `--list-processes` does
|
||||
exactly that for every pid file it finds, reporting each one's pid, container
|
||||
name, and `running`/`exited` status.
|
||||
name, and `running`/`exited` status. Normally the file is removed automatically
|
||||
when its own session ends, but `--clean-processes` removes any stale ones left
|
||||
behind (e.g. after a crash) using that same check, atomically per file, so it
|
||||
never removes one that's still genuinely running.
|
||||
|
||||
See `CLAUDE.md` for the full architecture writeup (file-by-file breakdown, the
|
||||
reasoning behind each of the above, and known gaps).
|
||||
|
||||
Reference in New Issue
Block a user