Dmenu 进程由 Bash 分叉?

Dmenu 进程由 Bash 分叉?

我正在查看 的输出pstree,并意识到我开始使用的进程dmenu似乎是从bash.

这背后的原因是什么?有什么方法可以让我的dmenu行为像gmrun其他应用程序启动器一样,并且只启动进程?


编辑:联机dmenu帮助页表明 shell 执行行为对于dmenu_run.我仍在寻找如何在启动程序后不让 shell 持续存在的问题。

答案1

我猜你正在看dmenu_run.应用程序列表是使用 shell 填充的,并传递回它以确定要运行的内容 - dmenu 不会启动任何内容,它只是将您选择的内容传递回正在侦听的任何内容,然后对其进行操作。 shell 正在承担繁重的工作,这就是需要它的原因。

答案2

dmenu不启动进程,它只是将所选项目打印到标准输出。实际执行您选择的程序取决于其他东西(可能是您的窗口管理器)。

您需要提供更多信息,说明dmenu需要任何人提供进一步帮助的原因。

答案3

过了一会儿,我最终在 ArchLinux 论坛上询问了这个问题。

看起来应该是/usr/bin/dmenu_run这样的:

#!/bin/sh
cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"}
if [ -d "$cachedir" ]; then
    cache=$cachedir/dmenu_run
else
    cache=$HOME/.dmenu_cache # if no xdg dir, fall back to dotfile in ~
fi
exec $(
    IFS=:
    if stest -dqr -n "$cache" $PATH; then
        stest -flx $PATH | sort -u | tee "$cache" | dmenu "$@"
    else
        dmenu "$@" < "$cache"
    fi
)

相关内容