From: Jäkel, Guido Date: Thu, 21 Feb 2013 21:31:25 +0000 (-0500) Subject: A new option '--host' for lxc-ps X-Git-Tag: lxc-0.9.0.rc1~2^2~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e2faa3724f1b05d5d5f9accc1b0f05f0ba26b5e;p=thirdparty%2Flxc.git A new option '--host' for lxc-ps Allow for an additional --host parameter to lxc-ps hiding all processes running in containers. Signed-off-by: Guido Jäkel Signed-off-by: Stéphane Graber Acked-by: Serge E. Hallyn --- diff --git a/doc/lxc-ps.sgml.in b/doc/lxc-ps.sgml.in index e266ba8af..b9d8e42b9 100644 --- a/doc/lxc-ps.sgml.in +++ b/doc/lxc-ps.sgml.in @@ -51,6 +51,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA lxc-ps --name name --lxc + --host -- ps option @@ -104,6 +105,18 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + + + + + limit the output to the processes belonging + to the host. + + + + diff --git a/src/lxc/lxc-ps.in b/src/lxc/lxc-ps.in index 5f7cf4db3..55a05ce48 100644 --- a/src/lxc/lxc-ps.in +++ b/src/lxc/lxc-ps.in @@ -19,7 +19,7 @@ usage() { - echo "usage: $(basename $0) [--lxc | --name NAME] [--] [PS_OPTIONS...]" >&2 + echo "usage: $(basename $0) [--lxc | --host | --name NAME] [--] [PS_OPTIONS...]" >&2 } help() { @@ -28,6 +28,7 @@ help() { echo "List current processes with container names." >&2 echo >&2 echo " --lxc show processes in all containers" >&2 + echo " --host show processes not related to any container, i.e. to the host" >&2 echo " --name NAME show processes in the specified container" >&2 echo " (multiple containers can be separated by commas)" >&2 echo " PS_OPTIONS ps command options (see \`ps --help')" >&2 @@ -80,6 +81,8 @@ while true; do containers=$2; list_container_processes=1; shift 2;; --lxc) list_container_processes=1; shift;; + --host) + list_container_processes=-1; shift;; --) shift; break;; *) @@ -118,6 +121,7 @@ ps "$@" | awk -v container_field_width="$container_field_width" \ -v list_container_processes="$list_container_processes" ' # first line is PS header NR == 1 { + header = $0 # find pid field index for (i = 1; i<=NF; i++) if ($i == "PID") { @@ -126,9 +130,9 @@ NR == 1 { } if (pididx == "") { print("No PID field found") > "/dev/stderr" + header = "" # to signal error condition to the END rule exit 1 } - header = $0 next } @@ -152,10 +156,11 @@ FNR == 1 { } END { + if (!header) exit 1 # quit due to internal error printf("%-" container_field_width "s %s\n", "CONTAINER", header) for (i in ps_line) { - container = container_of_pid[pid_of_line[i]] - if (list_container_processes == 0 || container != "") + container = container_of_pid[pid_of_line[i]] + if (list_container_processes == 0 || (container != "") == (list_container_processes > 0) ) printf("%-" container_field_width "s %s\n", container, ps_line[i]) } }