The*_*Cat 41 process kill signals
我经常开始读取一个大文件,然后在一段时间后想退出,但是从按
Ctrl+C到程序停止有延迟。是否有可能通过多次按Ctrl+C键来缩短延迟?还是我在浪费我的按键?
Joh*_*024 35
在第一个之后Ctrl-C,程序将接收SIGINT并通常开始清理(删除 tmp 文件、关闭套接字等)。如果您在此过程中Ctrl-C再次点击,您可能会中断清理程序(即可能会处理附加信号而不是单独处理),从而留下一团糟。虽然这通常不是这样的,比较常用的附加信号在事实上发送后过程完成(因为操作员与系统交互的固有延迟)。这意味着信号被另一个进程接收(通常是 shell,但不总是)。如果该接收者没有正确处理这个信号(就像 shell 通常做的那样 - 请参阅 Jenny D 的回答),您可能会对这种操作的结果感到不快。
Jen*_*y D 11
你在浪费它们。所发生的一切是,一旦服务器完成屏幕输出,它将收到多个Ctrl-C. 第一个将用于终止进程,接下来的将在您的 shell 中结束,然后看起来像
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$
Run Code Online (Sandbox Code Playgroud)
简短回答:如果过程对其做出反应。
长答案:当您点击ctrl+ 时c,内核会向进程发送信号。可以通过以下命令确定哪个信号:
user@host:~# stty -a | grep -i "\^C"
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
Run Code Online (Sandbox Code Playgroud)
请参阅以下手册页stty:
intr CHAR
CHAR will send an interrupt signal
Run Code Online (Sandbox Code Playgroud)
它是信号INT,也称为数字 2。当进程有一个信号处理程序时,它可以对此做出反应。大多数进程会执行一些清理工作以成功结束。