我正在编写一个代码:
变量,然后将其逐行传递给 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/