gpt4 book ai didi

bash - Linux pgrep 事件 xsession

转载 作者:行者123 更新时间:2023-12-04 18:45:59 24 4
gpt4 key购买 nike

我正在编写一个代码:

  • 将所有 xsessions 名称放在一个文件中。
  • 虽然不是 EOF ,但将一行分配给 a
    变量,然后将其逐行传递给 pgrep。
  • 在终端中输出 pgrep。

  • 有几种打印桌面环境、 session /窗口管理器的方法。

    但是我找不到一个适用于所有 xsession(/usr/share/xsessions) 的工作。

    经过多次尝试,它仍然无法正常工作。
    循环有问题。
    ls /usr/share/xsessions/>all_xsessions;while [ "$var" != "" ]; do let x=x+1; var=$(sed "${x}q;d" all_xsessions); pgrep -lu $(whoami) $var; done

    最佳答案

    不幸的是,没有真正的标准方法或通用环境变量。
    大部分信息可以从printenv获得但是变量名有很大不同。

    例如,在带有 xfce 的 arch-linux 中, session 直接从 windows-manager 运行,您可以获得 PID 来自 $SESSION_MANAGER多变的。

    但是在 ubuntu 中,这是现在最流行的桌面发行版,你的 x-session 实际上是 upstart-session,它启动了所有需要的东西。变量是$UPSTART_SESSION .

    在 xubuntu 中,你有 $SESSION_MANAGER 和 $UPSTART_SESSION 变量。

    还有$DESKTOP_SESSION ,它几乎无处不在,并且包含一些漂亮的桌面环境名称,例如 xfce、xubuntu 的 ubuntu。

    因此,这可能因发行版而异,但在大多数情况下,该脚本将适合您。

    #!/bin/bash
    [[ -n $SESSION_MANAGER ]] && pid="${SESSION_MANAGER##*/}"
    [[ -n $UPSTART_SESSION ]] && pid="${UPSTART_SESSION##*/}"
    process_name=$(cat /proc/$pid/cmdline)
    pretty_name=$DESKTOP_SESSION

    echo "$process_name : $pid : $pretty_name"

    输出将是这样的:
    # Arch with xfce
    xfce4-session : 3021 : xfce
    # Ubuntu
    /sbin/upstart--user : 3153 : ubuntu
    # Xubuntu
    init--user : 2343 : xubuntu

    编辑 : 你的方法在某些情况下可以工作,但大多数时候它会失败。只是因为现在在 ubuntu 上我有:
    $ ls -1 /usr/share/xsessions/
    openbox.desktop
    ubuntu.desktop

    Unity 中的 x-session 启动过程如下所示:
    root       964  0.0  0.0 276680  6032 ?        SLsl 00:16   0:00 /usr/sbin/lightdm
    root 997 3.8 0.9 255676 74708 tty7 Ss+ 00:16 0:15 \_ /usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
    root 1196 0.0 0.0 230304 6420 ? Sl 00:16 0:00 \_ lightdm --session-child 12 19
    user 1442 0.0 0.0 53756 4924 ? Ss 00:16 0:00 \_ /sbin/upstart --user
    user 1734 0.0 0.0 39992 280 ? S 00:16 0:00 \_ upstart-udev-bridge --daemon --user
    user 1737 0.2 0.0 43932 4332 ? Ss 00:16 0:00 \_ dbus-daemon --fork --session --address=unix:abstract=/tmp/dbus-wkfpguwfxw
    user 1749 0.0 0.1 93416 8756 ? Ss 00:16 0:00 \_ /usr/lib/x86_64-linux-gnu/hud/window-stack-bridge

    因此 /usr/share/xsessions/ 中的 session 名称之间没有相关性和真实的过程 cmdline .所以 pgrep 在那种情况下不会找到任何东西。

    关于bash - Linux pgrep 事件 xsession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40238789/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com