[hackers] [dmenu] [PATCH] Eliminate shell parent from processes spawned with dmenu_run

From: sebastien peterson boudreau <sebastien.peterson.boudreau_AT_gmail.com>
Date: Sat, 5 Jul 2025 19:25:28 -0300

The double-fork fed into the shell at the end of the pipeline causes the
process to be orphaned and thus adopted by init.

Upsides:
- Removes unnecessary shell processes, especially for long-running
  processes that may be started with dmenu_run
- Makes pstree(1) output look nicer ;)

Downsides(?):
- dmenu_run script is less simple :(
- if the user is using a non-Bourne shell (without '(..) &' as syntax),
  the script breaks because we are piping Bourne shell syntax into
  ${SHELL:-"/bin/sh"} -- the whole reason we use $SHELL is so users can
  type shell commands into dmenu_run; this would still be possible, but
  now we only support users using a Bourne-compatible shell !

I don't know if this is really worth it at all, but I saw the /bin/sh in
my pstree output and wanted to see if I could tweak this to get rid of
it :p

if there is a method to do this which is portable across shells it may
be worth it to do that.
---
 dmenu_run | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dmenu_run b/dmenu_run
index 834ede5..b7b3aca 100755
--- a/dmenu_run
+++ b/dmenu_run
_AT_@ -1,2 +1,2 @@
 #!/bin/sh
-dmenu_path | dmenu "$_AT_" | ${SHELL:-"/bin/sh"} &
+echo '( ' $(dmenu_path | dmenu "$_AT_") ') &' | ${SHELL:-"/bin/sh"}
-- 
2.50.0
Received on Sun Jul 06 2025 - 00:25:28 CEST

This archive was generated by hypermail 2.3.0 : Sun Jul 06 2025 - 07:25:07 CEST