Is there a linux command to determine the window IDs associated with a given process ID?

前端 未结 6 1984
借酒劲吻你
借酒劲吻你 2020-12-22 23:41

Given a process iD of XX, I\'d like to have a list of any window id\'s where _NET_WM_PID = XX. Even better would be the oldest still active window id if possible.

I

6条回答
  •  南方客
    南方客 (楼主)
    2020-12-23 00:16

    xwininfo and xprop permits to retrieve what you want, but it is a little tricky.

    xwininfo permits to retrieve all known windows, and xprop to query X about a single window ID for your _NET_WM_PID parameter.

    So far, a hacky way to do it would be:

    #!/bin/sh
    
    findpid=$1
    
    known_windows=$(xwininfo -root -children|sed -e 's/^ *//'|grep -E "^0x"|awk '{ print $1 }')
    
    for id in ${known_windows}
    do
        xp=$(xprop -id $id _NET_WM_PID)
        if test $? -eq 0; then
            pid=$(xprop -id $id _NET_WM_PID|cut -d'=' -f2|tr -d ' ')
    
            if test "x${pid}" = x${findpid}
            then
                echo "Windows Id: $id"
            fi
        fi
    done
    

    Result:

    mycroft:~ $ ./find_windows.sh 1919
    Windows Id: 0x1800748
    Windows Id: 0x181b221
    Windows Id: 0x1803ad5
    Windows Id: 0x181f681
    Windows Id: 0x181f658
    Windows Id: 0x180006d
    Windows Id: 0x1800003
    Windows Id: 0x1800001
    Windows Id: 0x180001e
    

    As you will see, a single process may have a certain number of known windows, even if you see only one on your screen.

    Maybe you should get these tools sources in order to make what you want.

提交回复
热议问题