cgred/cgrulesengd: no mueve el pid del nuevo usuario al archivo de tareas

cgred/cgrulesengd: no mueve el pid del nuevo usuario al archivo de tareas

cgrulesengd no puede mover el pid al archivo de tareas mientras se ejecuta como demonio. Si reinicio cgrulesengd, todos los pid se mueven correctamente al archivo de tareas, pero el nuevo pid no.

Entonces, si inicio sesión como usuario hola y luego ejecuto desde la raíz cgrulesengd -n -d, el usuario hola y todos sus procesos se mueven al archivo /cgrup/mem/hello/tasks. Pero cuando cierro sesión e inicio sesión, el saludo del usuario ya no se ve afectado por cgrulesengd.

Este es mi archivo de prueba.

#!/bin/bash
USER='hello'
cgdelete memory:${USER}/

cgclear
/etc/rc.d/rc.cgred stop

umount /cgroup/mem
rm -fr /cgroup/mem/

mkdir /cgroup/mem
mount -t cgroup -o memory mem /cgroup/mem

mkdir /cgroup/mem/${USER}

chown root:root   /cgroup/mem/${USER}/*
chown ${USER}:root /cgroup/mem/${USER}/tasks

echo 100M > /cgroup/mem/${USER}/memory.limit_in_bytes
echo 100M > /cgroup/mem/${USER}/memory.memsw.limit_in_bytes

[ ! -f '/etc/cgrules.conf_orig' ] && cp -pa /etc/cgrules.conf /etc/cgrules.conf_orig
echo "${USER} memory ${USER}/" > /etc/cgrules.conf
#echo "*       *       system/" >> /etc/cgrules.conf

/etc/rc.d/rc.cgred start
#cgrulesengd -n -d

ls -all /cgroup/mem/${USER}/tasks
cat /cgroup/mem/${USER}/tasks

echo -n "memory.limit_in_bytes  "
cat /cgroup/mem/${USER}/memory.limit_in_bytes
echo -n "memory.max_usage_in_byte  "
cat /cgroup/mem/${USER}/memory.max_usage_in_bytes

echo -n "memory.memsw.limit_in_bytes  "
cat /cgroup/mem/${USER}/memory.memsw.limit_in_bytes
echo -n "memory.memsw.max_usage_in_bytes  "
cat /cgroup/mem/${USER}/memory.memsw.max_usage_in_bytes

Producción:

./test_cgred.sh 
Stopping CGroup Rules Engine Daemon...                     [  OK  ]
umount: /cgroup/mem: not mounted
Starting CGroup Rules Engine Daemon:                       [  OK  ]
-rw-r--r-- 1 hello root 0 Sep 26 00:46 /cgroup/mem/hello/tasks
memory.limit_in_bytes  104857600
memory.max_usage_in_byte  0
memory.memsw.limit_in_bytes  104857600
memory.memsw.max_usage_in_bytes  0

Acabo de descubrir que cuando memory.max_usage_in_bytey memory.memsw.max_usage_in_byteses! = 0, todos los pid nuevos se mueven correctamente.

Mi pregunta es:

  1. ¿Por qué obtengo 0 memory.max_usage_in_bytey memory.memsw.max_usage_in_bytes?
  2. ¿Por qué el nuevo pid no se adjunta automáticamente al archivo de tareas?

Versión: libcgroup-0.41-x86_64-1

Solución temporal: agregada echo $$ >> /cgroup/mem/$USER/tasksa /etc/profile.

información relacionada