首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux pgrep活动xsession

Linux pgrep活动xsession
EN

Stack Overflow用户
提问于 2016-10-25 11:30:08
回答 1查看 393关注 0票数 1

我在写一段代码:

  1. 将所有xsession名称放入一个文件中。
  2. 而不是EOF,将一行赋给变量,然后逐行传递给pgrep。
  3. 终端输出pgrep。

有几种方法可以打印桌面环境,会话/窗口管理器。

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

经过多次尝试,它仍然不起作用。循环有一个问题。

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

EN

回答 1

Stack Overflow用户

发布于 2016-10-25 17:50:58

不幸的是,没有真正的标准方式或普遍的环境变量。大多数信息可以从printenv获得,但是变量名称有很大差异。

例如,在具有xfce的are中,会话直接从windows管理器运行,您可以从变量获得$SESSION_MANAGER PID

但是在ubuntu,这是现在最流行的桌面发行版,您的x会话实际上是一个新的会话,它启动所有需要的东西。变量是$UPSTART_SESSION

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

还有$DESKTOP_SESSION,它几乎无处不在,包含了一些桌面环境的名字,比如xfce,ubuntu的xubuntu。

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

代码语言:javascript
复制
#!/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"

产出将是这样的:

代码语言:javascript
复制
# Arch with xfce
xfce4-session : 3021 : xfce
# Ubuntu
/sbin/upstart--user : 3153 : ubuntu
# Xubuntu
init--user : 2343 : xubuntu

编辑:在某些情况下,您的方法可以工作,但大多数情况下它将失败。就因为现在我在ubuntu有:

代码语言:javascript
复制
$ ls -1 /usr/share/xsessions/
openbox.desktop
ubuntu.desktop

联合中的x会话启动过程如下所示:

代码语言:javascript
复制
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/中的会话名与实际进程cmdline之间没有相关性。所以pgrep在那种情况下什么都找不到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40238789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档