Ctrl+C 键在 TCP 连接中的行为如何
How is Ctrl+C key behaves in a TCP connection
我正在研究网络,特别是 tcp 连接,我想知道在您使用 tcp 连接远程连接到服务器并发送命令行以执行某些操作的情况下,他们如何处理发送 ctrl +c 信号?
它是否发送一个正常的 tcp 包,在数据部分描述 ctrl+c 命中?
还是它发送了一个打开了 RST
标志或 FIN
标志来切断或关闭连接的包?
没有通过 TCP 发送信号这样的事情。
Ctrl+C 是终端生成的信号。假设您(或 运行 进程)没有更改终端的设置,这意味着终端驱动程序将 Ctrl+C 组合键转换为 kill(x, SIGINT)
,其中 x
是进程前台进程组的组 ID(因此,SIGINT
被传送到前台进程组中的每个进程,在您的情况下,它可能只是一个进程)。
当信号被传递时进程做什么不是终端驱动程序的事。该进程可能忽略了该信号,因此什么也没有发生。或者它可能已经安装了一个信号处理程序,并在信号处理程序内部做一些工作(比如向套接字写入一些东西,当接收器读取时会导致它向自己发送 SIGINT
- 这模拟了 "remote signal delivery").或者它可能阻塞了信号 - 在这种情况下,信号会在进程解除阻塞时传递,或者如果进程同时忽略它,信号就会被取消。
另一方面,如果您(或 运行 进程)更改了终端设置,使 Ctrl+C 不被解释为信号生成组合键,则进程将读取 Ctrl+ C 来自输入。当然,发生什么情况取决于进程对其读取的输入执行的操作。
简而言之,如果您没有更改 SIGINT
的默认行为并且您没有更改终端的设置,Ctrl+C 会引发 SIGINT
;默认操作是终止进程,因此将关闭套接字并终止连接。
我正在研究网络,特别是 tcp 连接,我想知道在您使用 tcp 连接远程连接到服务器并发送命令行以执行某些操作的情况下,他们如何处理发送 ctrl +c 信号?
它是否发送一个正常的 tcp 包,在数据部分描述 ctrl+c 命中?
还是它发送了一个打开了 RST
标志或 FIN
标志来切断或关闭连接的包?
没有通过 TCP 发送信号这样的事情。
Ctrl+C 是终端生成的信号。假设您(或 运行 进程)没有更改终端的设置,这意味着终端驱动程序将 Ctrl+C 组合键转换为 kill(x, SIGINT)
,其中 x
是进程前台进程组的组 ID(因此,SIGINT
被传送到前台进程组中的每个进程,在您的情况下,它可能只是一个进程)。
当信号被传递时进程做什么不是终端驱动程序的事。该进程可能忽略了该信号,因此什么也没有发生。或者它可能已经安装了一个信号处理程序,并在信号处理程序内部做一些工作(比如向套接字写入一些东西,当接收器读取时会导致它向自己发送 SIGINT
- 这模拟了 "remote signal delivery").或者它可能阻塞了信号 - 在这种情况下,信号会在进程解除阻塞时传递,或者如果进程同时忽略它,信号就会被取消。
另一方面,如果您(或 运行 进程)更改了终端设置,使 Ctrl+C 不被解释为信号生成组合键,则进程将读取 Ctrl+ C 来自输入。当然,发生什么情况取决于进程对其读取的输入执行的操作。
简而言之,如果您没有更改 SIGINT
的默认行为并且您没有更改终端的设置,Ctrl+C 会引发 SIGINT
;默认操作是终止进程,因此将关闭套接字并终止连接。