我正在查看 的输出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
)