From 9eb32c0e81557ae4c11d52c482e1bda227da8a7b Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 26 May 2016 22:47:52 -0700 Subject: [PATCH] runtime: Replace "process is stopped" with "process exits" proc(5) describes the following state entries in proc/[pid]/stat [1] (for modern kernels): * R Running * S Sleeping in an interruptible wait * D Waiting in uninterruptible disk sleep * Z Zombie * T Stopped (on a signal) * t Tracing stop * X Dead and ps(1) has a bit more context [2] (for modern kernels): * D uninterruptible sleep (usually IO) * R running or runnable (on run queue) * S interruptible sleep (waiting for an event to complete) * T stopped by job control signal * t stopped by debugger during the tracing * X dead (should never be seen) * Z defunct ("zombie") process, terminated but not reaped by its parent So I expect "stopped" to mean "process still exists but is paused, e.g. by SIGSTOP". And I expect "exited" to mean "process has finished and is either a zombie or dead". After this commit, 'git grep -i stop' only turns up the "stopped" state (which I've left alone for backwards compat), some poststop-hook stuff, a reference in principles.md, a "stoppage" in LICENSE, and some ChangeLog entries. Also replace "container's process" with "container process" to match usage in the rest of the repository. After this commit: $ git grep -i "container process" | wc -l 20 $ git grep -i "container's process" | wc -l 1 Also reword status entries to avoid "running", which is less precise in our spec (e.g. it also includes "sleeping", "waiting", ...). Also removes a "them" leftover from a partial plural -> singular reroll of be594153 (Split create and start, 2016-04-01, #384). [1]: http://man7.org/linux/man-pages/man5/proc.5.html [2]: http://man7.org/linux/man-pages/man1/ps.1.html Signed-off-by: W. Trevor King --- runtime.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/runtime.md b/runtime.md index 6b8a66472..3702a27d3 100644 --- a/runtime.md +++ b/runtime.md @@ -15,9 +15,10 @@ This MUST be unique across all containers on this host. There is no requirement that it be unique across hosts. * **`status`**: (string) is the runtime state of the container. The value MAY be one of: - * `created`: the container has been created but the user-specified program has not yet been executed - * `running`: the container has been created and the user-specified program is running - * `stopped`: the container has been created and the user-specified program has been executed but is no longer running + + * `created`: the container process has neither exited nor executed the user-specified program + * `running`: the container process has executed the user-specified program but has not exited + * `stopped`: the container process has exited Additional values MAY be defined by the runtime, however, they MUST be used to represent new runtime states not defined above. * **`pid`**: (int) is the ID of the container process, as seen by the host. @@ -55,8 +56,8 @@ The lifecycle describes the timeline of events that happen from when a container However, some actions might only be available based on the current state of the container (e.g. only available while it is started). 4. Runtime's [`start`](runtime.md#start) command is invoked with the unique identifier of the container. The runtime MUST run the user-specified program, as specified by [`process`](config.md#process). -5. The container's process is stopped. - This MAY happen due to them erroring out, exiting, crashing or the runtime's [`kill`](runtime.md#kill) operation being invoked. +5. The container process exits. + This MAY happen due to erroring out, exiting, crashing or the runtime's [`kill`](runtime.md#kill) operation being invoked. 6. Runtime's [`delete`](runtime.md#delete) command is invoked with the unique identifier of the container. The container MUST be destroyed by undoing the steps performed during create phase (step 2).