无法正确否认 AppImage

Unable to properly disown AppImage

今晚一直在修修补补,但找不到解决方案。

我写了一个小脚本,我用“popup-shell”调用它,它使用 fzf 到 select 一个文件。我将此文件传递给 marktext appimage 并否认该过程,之后“popup-shell”关闭。不幸的是,shell 关闭后,marktext 应用程序也关闭了。

我认为问题在于可执行文件被正确地拒绝了,但 appimage mount-stuff 仍在子处理到“popup-shell”。一旦“popup-shell”关闭,appimage mount-stuff 也会关闭,这反过来会导致 marktext 关闭。

进程树式:

popup-shell
  +- script that spawns marktext appimage
  |  +- /tmp/.mount_markXXXXX/marktext ...
  |  |  +- /tmp/.mount_markXXXXX/marktext ...
  |  |     +- /tmp/.mount_markXXXXX/marktext ...
  |  |        +- /tmp/.mount_markXXXXX/marktext ...
  |  +- /tmp/.mount_markXXXXX/marktext ...
  |  |  +- /tmp/.mount_markXXXXX/marktext ...
  |  +- /tmp/.mount_markXXXXX/marktext ...
  |  +- /tmp/.mount_markXXXXX/marktext ...
marktext ...

实际的 marktext 二进制文件似乎已被正确否认。

脚本并不复杂,只是 运行:

marktext <file> &
disown -h %1

任何指点将不胜感激。

您可以使用

setsid -f marktext <file>

到 运行 新会话中的程序。

-f 选项会告诉 setsid 立即分叉到后台。快速测试显示 disown 仍将保留父进程,而 setsid 不会

sleep 100 &
disown -h %1
ps -C sleep -oppid,pid

产出

PPID     PID
32772   32806

setsid -f sleep 100
ps -C sleep -oppid,pid

产出

PPID     PID
1       32814

Some further reading