为什么XKillClient会杀死客户端的孩子?

时间:2015-06-09 18:17:43

标签: linux user-interface

我正在Linux / X上编写一个程序来杀死鼠标所指向的应用程序。

当它正在运行时,我启动xterm并执行“surf duckdcukgo.com&”或“leafpad&”。然后我用我的程序使用Alt + Escape杀死xterm,xterm和从它内部启动的应用程序都死了。只有xterm应该死掉。如果我发布“mupdf some.pdf&”它按预期工作。我不知道启动的应用程序的选择如何影响问题。有时候,“冲浪”最终还是需要几秒钟。

XKillClient还有什么可以添加的吗?我应该使用其他东西而不是XKillClient吗?

这是代码。

#include <X11/keysym.h>
#include <X11/Xlib.h>

int main(void)
{
    Display     *display;
    XEvent      event;
    Window      root;
    signed int  trash;
    Window      wtrash;
    Window      wfocused = 0;

    display = XOpenDisplay(NULL);
    if(display == NULL)
    {
        return 1;
    }

    root = DefaultRootWindow(display);
    XGrabKey(display, XKeysymToKeycode(display, XK_Escape), Mod1Mask, root, True, GrabModeAsync, GrabModeAsync);

    while(1)
    {
        XNextEvent(display, &event);
        if(event.type == KeyPress)
        {   
            if(event.xkey.keycode == XKeysymToKeycode(display, XK_Escape))
            {
                XQueryPointer(display, root, &wtrash, &wfocused, &trash, &trash, &trash, &trash, (unsigned int*)&trash);
                XKillClient(display, wfocused);
            }
        }
    }
}

0 个答案:

没有答案