Commit 566c0d6d by Serge Hallyn

lxc-ps: handle cgroup collisions

A few months ago cgroup handling in lxc was updated so that if /sys/fs/cgroup/$cgroup/lxc/$container already exists (most often due to another container by the same name under a different lxcpath), then /sys/fs/cgroup/$cgroup/lxc/${container}-N would be used. lxc-ps was never updated to handle this. Fix that. (Note, the ns cgroup is being special cased there, but I don't really believe ns cgroup works any more.) It would be preferable to rewrite lxc-ps in python or in C, but this at least makes the basic lxc-ps work in the case of multiple containers with the same name. Changelog: fix missing fi. replace 'z1' with '$container' as pointed out by Christian Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
parent 7f4717c2
...@@ -17,9 +17,11 @@ ...@@ -17,9 +17,11 @@
# License along with this library; if not, write to the Free Software # License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
. @DATADIR@/lxc/lxc.functions
usage() usage()
{ {
echo "usage: $(basename $0) [--lxc | --host | --name NAME] [--] [PS_OPTIONS...]" >&2 echo "usage: $(basename $0) [-P PATH] [--lxc | --host | --name NAME] [[--] [PS_OPTIONS...]" >&2
} }
help() { help() {
...@@ -31,6 +33,7 @@ help() { ...@@ -31,6 +33,7 @@ help() {
echo " --host show processes not related to any container, i.e. to the host" >&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 " --name NAME show processes in the specified container" >&2
echo " (multiple containers can be separated by commas)" >&2 echo " (multiple containers can be separated by commas)" >&2
echo " -P PATH show container in lxcpath PATH" >&2
echo " PS_OPTIONS ps command options (see \`ps --help')" >&2 echo " PS_OPTIONS ps command options (see \`ps --help')" >&2
} }
...@@ -65,7 +68,7 @@ get_parent_cgroup() ...@@ -65,7 +68,7 @@ get_parent_cgroup()
# (do not append '/lxc' if the hierarchy contains the 'ns' subsystem) # (do not append '/lxc' if the hierarchy contains the 'ns' subsystem)
case ",$subsystems," in case ",$subsystems," in
*,ns,*) parent_cgroup="${mountpoint}${init_cgroup%/}";; *,ns,*) parent_cgroup="${mountpoint}${init_cgroup%/}";;
*) parent_cgroup="${mountpoint}${init_cgroup%/}/lxc";; *) parent_cgroup="${mountpoint}${init_cgroup%/}";;
esac esac
break break
done done
...@@ -83,6 +86,8 @@ while true; do ...@@ -83,6 +86,8 @@ while true; do
list_container_processes=1; shift;; list_container_processes=1; shift;;
--host) --host)
list_container_processes=-1; shift;; list_container_processes=-1; shift;;
-P|--lxcpath)
lxc_path=$2; shift 2;;
--) --)
shift; break;; shift; break;;
*) *)
...@@ -111,8 +116,12 @@ for container in ${containers}; do ...@@ -111,8 +116,12 @@ for container in ${containers}; do
container_field_width=${#container} container_field_width=${#container}
fi fi
if [ -f "$parent_cgroup/$container/tasks" ]; then if lxc-info -P $lxc_path -t RUNNING -n $container; then
tasks_files="$tasks_files $parent_cgroup/$container/tasks" initpid=`lxc-info -P $lxc_path -p -n $container | awk -F: '{ print $2 }' | awk '{ print $1 }'`
cgroup=`head -n 1 /proc/$initpid/cgroup | awk -F: '{ print $3}'`
if [ -f "$parent_cgroup/$cgroup/tasks" ]; then
tasks_files="$tasks_files $parent_cgroup$cgroup/tasks"
fi
fi fi
done done
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment