Ctrl+C 进程终止而不终止终端

Ctrl+C 进程终止而不终止终端

我开始在 Ubuntu 14.04 下使用 Sublime Text 3 编译我的 FreeFem 脚本(解释器 PDE 包求解器)。为了调用解释器,我定制了构建系统,如下所示

"shell_cmd": " gnome-terminal -x sh -c \"FreeFem++ $file ; exec sh\""

每次运行编译时,我都想创建一个单独的终端进程来启动 FreeFem++。但是当我按Ctrl+时C,它会杀死终端。相反,我想终止进程但保持终端窗口打开。

答案1

Ctrl+C杀死 shell 以及 FreeFem 子进程,因为 SIGINT 信号被发送到整个前台进程组。由于 shell 不是交互式的,因此子进程在同一进程组中运行。看为什么 SIGINT 发送到其父进程时没有传播到子进程?抽象、会话、会话领导者和流程组的目的是什么?有关进程组的一些背景信息。

通过设置陷阱,可以使 shell 在接收到 SIGINT 时不会死掉。 (不要忽略该信号:这也会导致它被子进程忽略。)

"shell_cmd": " gnome-terminal -x sh -c \"trap echo INT; FreeFem++ $file ; exec bash\""

相关内容