如何向tmux窗口内运行的脚本发送Ctrl-C而非关闭窗口?
解决Ctrl-C终止Python后不关闭tmux窗口的问题
方法1:修改Shell脚本,让Python退出后保持脚本运行
在/opt/script.sh的末尾,将原有的python3 script.py替换为以下内容之一:
启动交互Shell(推荐):
python3 script.py exec bash # 若使用zsh则替换为exec zsh当你用Ctrl-C终止Python后,脚本会自动启动一个交互Shell,tmux窗口不会因脚本退出而关闭,你可以在窗口内继续执行其他命令。
进入无限休眠状态:
python3 script.py while true; do sleep 3600; done这种方式会让脚本在Python退出后持续休眠,窗口保持存活,但需要手动杀死脚本进程才能关闭窗口。
方法2:配置tmux窗口退出后保留
创建会话时直接启用remain-on-exit选项,让窗口在初始命令退出后不关闭:
tmux new -d -s 'my-session' -n my-window -o remain-on-exit=on '/opt/script.sh'
若会话已创建,可在tmux中执行以下命令修改对应窗口的设置:
tmux set-window-option -t my-session:my-window remain-on-exit on
即使script.sh因Python终止而退出,tmux窗口依然会保留。你可以通过tmux send-keys -t my-session:my-window 'bash' Enter在窗口内启动新的交互Shell。
方法3:直接向Python进程发送SIGINT信号
如果你不想修改脚本或tmux配置,可以通过信号直接终止Python进程:
- 查找Python进程的PID:
pgrep -f 'python3 script.py' - 发送Ctrl-C对应的
SIGINT信号:kill -SIGINT <找到的PID>
也可以通过tmux命令模拟发送Ctrl-C按键(效果与手动操作一致,需结合方法1或2避免窗口关闭):
tmux send-keys -t my-session:my-window C-c
内容的提问来源于stack exchange,提问作者Adriaantje
相关产品推荐
相关产品推荐

