You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Alacritty快捷键执行脚本后,Obsidian随终端关闭问题排查

问题:通过Alacritty快捷键启动脚本后,关闭终端会终止Obsidian进程

我想用键盘快捷键执行一系列操作后启动Obsidian,当前使用Alacritty作为默认终端模拟器,运行的脚本如下:

#! /bin/bash

echo Doing some heavy stuff
sleep 5

echo Doing some other heavy stuff
sleep 3

echo Opening Obsidian
/home/enzo/tools/obsidian &

直接在终端执行该脚本时一切正常:会打印对应信息,且启动的Obsidian实例独立于终端,关闭终端不会影响它。但通过快捷键执行alacritty -e my_script.sh时,新Alacritty实例虽能正确执行脚本,但关闭终端后Obsidian也会被关闭。

我尝试了多种nohup、&和disown的组合,但均无效。shopt显示huponexit已设为off,理论上不会向子进程发送SIGHUP信号,这也是直接执行脚本正常的原因。

理想流程:

  • 按下快捷键(如CMD + N)
  • 新终端窗口打开并打印执行信息
  • Obsidian启动并正常运行
  • 关闭终端窗口后,Obsidian不受影响

请问问题出在哪里?我遗漏了什么?


解决方案

问题根源在于:通过alacritty -e启动脚本时,脚本进程是Alacritty的直接子进程,Obsidian又是脚本的子进程。当关闭Alacritty窗口时,它会向直接子进程(脚本)发送SIGTERM信号,脚本退出时仍会将信号传递给Obsidian,哪怕huponexit设为off也无法避免。

你可以通过以下两种方式让Obsidian完全脱离当前进程组,确保终端关闭后不受影响:

方式一:使用nohup + disown

修改脚本中启动Obsidian的代码为:

echo Opening Obsidian
nohup /home/enzo/tools/obsidian > /dev/null 2>&1 &
disown -h
  • nohup:让Obsidian忽略SIGHUP信号,同时将标准输出和错误重定向到/dev/null,避免生成多余的nohup.out文件
  • &:让Obsidian后台运行
  • disown -h:将Obsidian进程从当前shell的作业列表中移除,确保shell退出时不会向它发送任何信号

方式二:使用setsid

setsid会创建一个全新的会话,让Obsidian完全脱离当前终端的进程组,代码修改为:

echo Opening Obsidian
setsid /home/enzo/tools/obsidian &

两种方式都能达成你的需求,可根据习惯选择。


内容的提问来源于stack exchange,提问作者Enzo Bonacina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:17:45