Octave Ctrl-C杀死编辑窗口

时间:2012-06-28 04:31:10

标签: linux matlab octave interrupt

我正在使用Ubuntu 12.04和Octave:

$ octave
octave:1> _

我将编辑器设置为gedit:

octave:1> edit editor "gedit %s"

我编辑了一个函数:

octave:2> edit someFunction

gedit按预期打开someFunction.m并提示返回,而gedit仍然打开文件:

octave:3> _

我运行了一些其他长时间运行的功能:

octave:3> runAllTests

当runAllTests正在执行时,我按CTRL-C来中断它。

观察到的行为是runAllTests被中断并且gedit被杀死。

预期的行为是runAllTests被中断并且gedit没有被杀死。

有没有人知道在这种情况下如何阻止CTRL-C杀死gedit?另外还有另一种方法可以在不杀死gedit的情况下中断runAllTests吗?

4 个答案:

答案 0 :(得分:2)

设置:

edit editor "gedit %s &"

导致八度音程将编辑器“置于后台”,因此CTRL-C不会影响它并具有预期的行为。

答案 1 :(得分:0)

尝试:

edit mode async

指定编辑命令的异步执行模式

答案 2 :(得分:0)

问题是CTRL + C也是一个复制命令。可能需要像Octave GUI Xoctave中那样自定义IT。 They claim that customization is available.

答案 3 :(得分:0)

不幸的是,将分叉的流程置于背景中'&'使用命令行(octave-cli)时,这是不够的。

GNU Octave development webpage有关于此问题的错误。

当然,它不仅是一个编辑器问题,而且任何新的分叉进程都会受到影响。例如

octave> system("$TERM&")

在新窗口中创建一个终端,该窗口将被后续的<ctrl-c>杀死。

我提出了一个基于shell的解决方法。这包括在后台添加额外的&#34;分叉&#34;,这将保护最终终端(或文本编辑器或其他)免受发送到八度音程的信号。简而言之,我启动了一个终端,它在后台发射另一个终端,从中我杀了第一个终端(这样就不会打扰我们了。)

创建可执行文件:

term-kill.sh
-----------------------------
#!/bin/sh
$TERM&
sleep 0.01
kill $1
-----------------------------

(注意sleep命令,没有这些命令,第二个终端没有时间在第一个终端被杀之前从第一个终端分离。然后,命令

octave> system("$TERM -e term-kill.sh $$&")

创建一个不会被杀的终端。

要打开文本编辑器,只需考虑可执行文件

term-edit-kill.sh
------------------------
#!/bin/sh
$TERM -e $EDITOR $1&
sleep 0.01
kill $2
------------------------

并通过

更改八度edit命令
octave> EDITOR('$TERM -e term-edit-kill.sh %s $$')

N.B。:我假设您的系统知道如何查找term-kill.shterm-edit-kill.sh,并且变量$TERM$EDITOR已存在且符合您的需求。终端仿真程序必须支持-e选项。