Hi!

I try to use the liblxc start() API from my process and it worked, but I notice 
it would not set the process name for the container process as it would do from 
the lxc-start command line.  Instead the container process stayed with the name 
of my caller.

I sniff around and make a local fix.  I'm sorry I do not know how to contribute 
this to lxc, but if anyone want to do that, here is the code.  Reason is: 
/proc/self/stat contains the process name in parentheses.  If the name contains 
space, when liblxc parse the file it would get off by one field, and get 
confused and fail in setproctitle().

I don't know if my fix is robust enough for real, but at least should point 
someone to the right place?  This looks for trailing ") " sequence (parent and 
space).  That is still subject to errors because the process name might include 
such, but maybe there is not a way to avoid a false positive sometimes.  You 
cannot paren match either, because a process may not have matching.  Well 
anyway, this at least account for spaces in process name, which is a little bit 
common situation I think.

I hope it would help someone.


@@ -296,10 +296,23 @@ int setproctitle(char *title)
                return -1;
        }
 
-       /* Skip the first 25 fields, column 26-28 are start_code, end_code,
+        /* Find the end of the process name, which is bounded by parentheses.
+         * Some processes may include parens in their name, which in the worst
+         * case can trigger a false positive no matter what we do here.  This
+         * tries to avoid that by looking for a ') ' sequence.
+         */
+       tmp = buf;
+
+       while (tmp[0] && tmp[1] && tmp[0] != ')' && tmp[1] != ' ') {
+               tmp = strchr(tmp + 1, ')');
+               if (!tmp)
+                       return -1;
+       }
+
+       /* Skip the next 23 fields, column 26-28 are start_code, end_code,
         * and start_stack */
-       tmp = strchr(buf, ' ');
-       for (i = 0; i < 24; i++) {
+       tmp = strchr(tmp+1, ' ');
+       for (i = 0; i < 23; i++) {
                if (!tmp)
                        return -1;
                tmp = strchr(tmp+1, ' ');


_______________________________________________
lxc-users mailing list
lxc-users@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-users

Reply via email to