Parsing enviroment variables of a process at a BSD-like operating system

Guido Berhoerster gber at opensuse.org
Sun Jul 5 23:31:08 CEST 2015


* Landry Breuil <landry.breuil at gmail.com> [2015-07-05 22:31]:
> On Sun, Jul 5, 2015 at 9:36 PM, Stephan Haller <nomad at froevel.de> wrote:
> > Hi Devs,
> >
> > I know you as being sensitive that all Xfce related applications are
> > running well also at BSD-like operating systems. That's why I ask you
> > for help.
> >
> > I'm the author of xfdashboard. I just implemented an application tracker
> > which tries to determine which applications are running and marking the
> > corresponding icon in the favourites.
> >
> > To archive it xfdashboard listens to newly opened windows, gets its
> > process id and parses the enviroment variable set of the process
> > at /proc/<<PID>>/environ. If it contains all needed environment
> > variables and if their values are valid, then an application is
> > considered to be running and marked. It is ok that this
> > file /proc/<<PID>>/environ only contains the environment variables and
> > name at the time the process was spawned. I do not need to know if they
> > changed in the meantime.
> >
> > I know BSD is working a different way but I have no idea at all how BSD
> > is working in real. So how can get this enviroment variable set under
> > BSD? I really would like to use the algorithm at BSD as well because it
> > is the best way I found.
> 
> Hey,
> 
> on openbsd (and netbsd) you can use the kvm_getprocs() interface which
> will return you an array of kinfo_proc structure, which you can pass
> to kvm_getenvv().
> For freebsd there's probably something similar.

On FreeBSD there is libprocstat, see the man page at
https://www.freebsd.org/cgi/man.cgi?query=libprocstat&apropos=0&sektion=0&manpath=FreeBSD+10.1-RELEASE&arch=default&format=html

It should be along the lines of procstat_open_sysctl() to get a
pointer to a procstat struct for use with sysctl,
procstat_getprocs() with the pid in order to get an array of
exactly one kinfo_proc structs representing the process, and
procstat_getenvv() to actually get the enviroment from the
kinfo_proc.

> 
> I don't really understand why you need to look at the environment to
> figure out if an application is running though..

Me neither.
-- 
Guido Berhoerster


More information about the Xfce4-dev mailing list