[lxc-users] library start() API from process name having spaces

Tycho Andersen tycho at tycho.ws
Thu Jul 5 14:08:26 UTC 2018


On Thu, Jul 05, 2018 at 03:42:55PM +0200, Christian Brauner wrote:
> On Wed, Jul 04, 2018 at 03:23:19PM -0400, Chaetoo3 wrote:
> > 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.
> 
> You mean it wouldn't change from "my binary --with --args" to "[lxc monitor]?
> 
> > 
> > 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.
> > +         */
> 
> Interesting. Ccing Mr. Andersen in case he has any opinions or wants to
> contribute a patch.

I suppose we could read /proc/self/status, find what's after the Name:
field, and then skip that many characters? I probably won't have time
to look at a patch this week, though.

Tycho


More information about the lxc-users mailing list