我一直在寻找答案,但到目前为止没有找到任何东西可以回答我的问题。我当前正在登录我的 Ubuntu 服务器,在运行进程时我无法在其上运行任何中断。这是我的 stty -a:
user@Ubuntu1:~$ stty -a
speed 38400 baud; rows 93; columns 200; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
我的 .bashrc 中没有任何内容可以更改中断。
这对于包括 root 在内的所有用户都是相同的。我还尝试使用不同的终端从不同的位置登录,每次都会出现相同的结果。我已经使用了 ssh 和 ssh -X 来登录。
编辑:在本地,我的所有中断都工作正常。
更新:我仍在寻找答案。我的朋友也有同样的问题。问题似乎很严重,当登录(从 PC、Mac、Linux)时,键盘没有拾取这些键(即使映射正确)。
答案1
ctrl+c永远不会终止程序,
它不是这么做的。
POSIX 标准定义了一组信号,这些信号用于控制正在运行的程序。
First the signals described in the original POSIX.1-1990 standard.
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no
SIGTERM 15 Term Termination signal
-http://man7.org/linux/man-pages/man7/signal.7.html
ctrl+向您从终端运行的程序c发送信号“键盘中断”。2
处理该信号完全取决于程序,它可以做任何它想做的事。许多脚本语言解释器可能会以默认方式处理此问题,即终止被调用的脚本并正常退出。
如果您希望程序退出,特别是从自动上下文中退出,建议使用singal 15,该kill
程序可用于通过id(pid)向进程发送信号。
kill -15 <pid>
据我所知,程序本身仍然会接收到这个信号,并且应该尽可能干净地终止。
如果程序忽略信号 15,并且程序仍然存在(并且您不会由于权限错误而无法发送信号)
kill -9 <pid>
据我所知,信号 9 由内核(任务管理器和硬件接口)解释,内核突然停止处理程序,并取消分配/释放其所有资源。
答案2
这是一些硬核技巧:
Control-Z
它将暂停您的进程并返回该进程的作业 ID
然后:
kill -9 %1
(将 1 替换为您的工作 ID)。
注意:百分比是强制性的!否则你将杀死你的 init 进程,这意味着你将杀死内核并且整个系统将崩溃(所以不要在中间放置空格:)
答案3
如果我不得不猜测,那是因为您可能在终端设置中将Ctrl+映射到“复制”。C如果将其更改为Ctrl+ Shift+ C,则Ctrl+C将再次正常工作以停止进程。