Control+C 不会停止 Linux 中的任何进程。它只是显示 ^C 文本并且不执行任何操作

Control+C 不会停止 Linux 中的任何进程。它只是显示 ^C 文本并且不执行任何操作

通常在 Linux 上,如果你点击⎈ Control+C它会发送SIGINT到程序,并且根据程序如何处理它,它们通常会终止。

然而,对我来说,没有程序终止。它对任何事情都不起作用。它通常终止程序的所有地方都不起作用。例如,如果我正在tail -f日志文件上运行。

好像SIGINT没有发送。我不知道如何调整它,甚至不知道如何检查它。

要终止程序,我必须⎈ Control+Z然后手动终止线程。

我已经尝试了很多方法来使其正常工作:

  • 不同的终端程序
  • 不同的用户
  • 重新启动服务器
  • 不同的外壳 ( /bin/bash /bin/sh)

有用的规格:

  • CENTOS 7(从 osx 机器访问)
  • bash shell
  • 使用 iterm 和终端
  • gcloud 虚拟机

我很乐意发送任何人请求的日志或任何调试信息。但我非常困惑。

调试信息:

stty -a  

speed 38400 baud; rows 62; columns 270; 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;  

-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8  
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0  

isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

答案1

天哪,六周后我终于发现了问题。

我使用它进行了调试trap

运行trap会给你一个被捕获的信号列表

trap -- '' SIGINT  
trap -- '' SIGQUIT  
trap -- '' SIGTSTP  
trap -- '' SIGTTIN  
trap -- '' SIGTTOU  

我在该列表中找到了 SIGINT,因此某些原因导致 SIGINT 被添加到本质上被忽略的陷阱列表中。经过一番挖掘后,我发现一些在我的 bash 配置文件中使用 rvm 加载的 ruby​​ 库正在搞乱捕获。

无论如何,为了修复它,我添加了:
trap - INT

到我的 bash 配置文件的末尾,在 ruby​​ 库的内容之后,一切都很好。

耶!

相关内容