cgred / cgrulesengd - 不會將新使用者 pid 移至任務文件

cgred / cgrulesengd - 不會將新使用者 pid 移至任務文件

作為守護程式運行時,cgrulesengd 無法將 pid 移到任務文件,如果我重新啟動 cgrulesengd,所有 pid 都會正確移動到任務文件,但新 pid 不會。

因此,如果我以 hello 使用者身分登錄,然後從 root cgrulesengd -n -d 運行,則使用者 hello 及其所有進程都會移動到 /cgrup/mem/hello/tasks 檔案。但是當我登出並登入時,使用者 hello 不再受到 cgrulesengd 的影響。

這是我的測試文件。

#!/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

輸出:

./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

我剛剛發現當memory.max_usage_in_byteand memory.memsw.max_usage_in_bytesis != 0 時,所有新的 pid 都會正確移動。

我的問題是:

  1. 為什麼我在memory.max_usage_in_byte和中得到 0 memory.memsw.max_usage_in_bytes
  2. 為什麼新的 pid 沒有自動附加到任務文件?

版本:libcgroup-0.41-x86_64-1

臨時解決方法:新增echo $$ >> /cgroup/mem/$USER/tasks至/etc/profile.

相關內容