hi Ivana, Dhaval

What do you think about this problem?

On 2014/10/8 8:50, Weng Meiling wrote:
> 
> On 2014/10/2 2:51, Balbir Singh wrote:
>> Do you have any debug logs with traces of what cgred is doing? My best
>> guess is cgred will need to be enhanced, feel free to send a patch
>>
>> Balbir Singh
>>
> I think the attached cgred log in debug mode has already shown what cgred is 
> doing, it
> just can't detected runnning threads from /proc when cgred starts. A patch 
> has been
> sent in before mails as following, but not sure whether it is optimal:
> 
> The following patch maybe can deal with this situation, another way to deal 
> with this situation is
> to use cgroup.procs file then tasks in cgroup_attach_task_pid() according to 
> some conditions,
> but this need to modify many apis, so I think the following patch is more 
> suitable, just modify one
> api. What do you think about this?
> 
> Subject: [PATCH] cgred: cgred should deal with threads when starts
> 
> Signed-off-by: Weng Meiling <wengmeiling.w...@huawei.com>
> ---
> src/api.c | 44 ++++++++++++++++++++++++++++++++------------
> 1 file changed, 32 insertions(+), 12 deletions(-)
> 
> diff --git a/src/api.c b/src/api.c
> index 8106eff..951cafb 100644
> --- a/src/api.c
> +++ b/src/api.c
> @@ -3189,25 +3189,45 @@ int cgroup_change_all_cgroups(void)
> 
>       while ((pid_dir = readdir(dir)) != NULL) {
>              int err, pid;
>  -            uid_t euid;
>  -            gid_t egid;
>  -            char *procname = NULL;
>  +            DIR *subdir;
>  +            struct dirent *subpid_dir = NULL;
>  +            char subpath[FILENAME_MAX];
> 
>               err = sscanf(pid_dir->d_name, "%i", &pid);
>               if (err < 1)
>                       continue;
>  -            err = cgroup_get_uid_gid_from_procfs(pid, &euid, &egid);
>  -            if (err)
>  -                    continue;
>  +            /* sscanf the task directory to deal with threads */
>  +            memset(subpath, 0, FILENAME_MAX);
>  +            sprintf(subpath, "/proc/%d/task", pid);
>  +            subdir = opendir(subpath);
>  +            if (!subdir) {
>  +                    closedir(dir);
>  +                    return -ECGOTHER;
>  +            }
> 
>  -            err = cgroup_get_procname_from_procfs(pid, &procname);
>  -            if (err)
>  -                    continue;
>  +            while ((subpid_dir = readdir(subdir)) != NULL) {
>  +                    int subpid;
>  +                    gid_t egid;
>  +                    uid_t euid;
>  +                    char *procname = NULL;
>  +                    err = sscanf(subpid_dir->d_name, "%i", &subpid);
>  +                    if (err < 1)
>  +                            continue;
> 
>  -            err = cgroup_change_cgroup_flags(euid, egid, procname, pid, 0);
>  -            if (err)
>  -                    cgroup_dbg("cgroup change pid %i failed\n", pid);
>  +                    err = cgroup_get_uid_gid_from_procfs(subpid, &euid, 
> &egid);
>  +                    if (err)
>  +                            continue;
>  +
>  +                    err = cgroup_get_procname_from_procfs(subpid, 
> &procname);
>  +                    if (err)
>  +                            continue;
>  +
>  +                    err = cgroup_change_cgroup_flags(euid, egid, procname, 
> subpid, 0);
>  +                    if (err)
>  +                            cgroup_dbg("cgroup change pid %i failed\n", 
> subpid);
>  +            }
>  +            closedir(subdir);
>      }
> 
>      closedir(dir);
> 
> 
> 



------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://p.sf.net/sfu/Zoho
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to