finding process id of a window

Marcus Schäfer ms at
Sun Apr 3 23:41:21 PDT 2005


> I have few  X applications, started from the command line with identical
> command line, but each has a different DISPLAY environment variable.
> Is there a way to get the process id of a process from its window ?
> Using xlsclients I can get the command line of the application, but since
> all of them use same command line, I can't find unique process id.
> Thanks for your help.

maybe the _NET_WM_PID property can help here:

int main (int argc, char*argv[]) {
    Atom atom,actual_type;
    Display *dpy;
    int screen;
    char *atom_name;
    int actual_format;
    unsigned long nitems;
    unsigned long bytes_after;
    unsigned char *prop;
    int status;
    int pid;
    Window w=0;

    dpy = XOpenDisplay((char*)getenv("DISPLAY"));
    screen = DefaultScreen(dpy);
    if (argc!=2) {
        printf("Usage %s window-id\n",argv[0]);
    sscanf(argv[1],"0x%x",(unsigned int*)(&w));
    atom = XInternAtom(dpy, "_NET_WM_PID", True);
    atom_name = XGetAtomName (dpy,atom);
    status = XGetWindowProperty(
        dpy, w, atom, 0, 1024,
        False, AnyPropertyType,
        &actual_format, &nitems,

    if (status!=0) {
        printf("Cannot get _NET_WM_PID");
    if (! prop) {
        printf ("No properties\n");
        exit (-3);

    pid = prop[1] * 256;
    pid += prop[0];
    printf("pid of window 0x%x = %d\n",(unsigned int)w,pid);

    return 0;

please note this will only work if the _NET_WM_PID property can
be accessed and thus a windowmanager doing this is required.

 Public Key available
 Marcus Schäfer (Res. & Dev.)   SUSE LINUX Products GmbH
 Tel: 0911-740 53 0             Maxfeldstrasse 5
 FAX: 0911-740 53 479           D-90409 Nürnberg             Germany

More information about the xorg mailing list