0

我正在研究网络,特别是 tcp 连接,我想知道在您使用 tcp 连接远程连接到服务器并发送命令行以执行某些操作的情况下,他们如何处理发送ctrl+c信号?它是否发送了一个在数据部分描述+命中
的普通 tcp 包? 还是它发送一个已打开标志或标志以切断或关闭连接的包?ctrlc
RSTFIN

4

1 回答 1

0

没有通过 TCP 发送信号这样的事情。

Ctrl+C 是终端生成的信号。假设您(或正在运行的进程)没有更改终端的设置,这意味着终端驱动程序将 Ctrl+C 组合键转换为 a kill(x, SIGINT),其中x是前台进程组的进程组 ID(因此,SIGINT交付到前台进程组中的每个进程,在您的情况下,这可能只是一个进程)。

传递信号时进程做什么不是终端驱动程序的事情。该进程可能忽略了该信号,因此没有任何反应。或者它可能已经安装了一个信号处理程序,并在信号处理程序内部做一些工作(比如向套接字写入一些东西,当接收器读取时会导致它发送SIGINT给自己——这模拟了“远程信号传递”)。或者它可能已经阻塞了信号——在这种情况下,信号在进程解除阻塞时被传递,或者如果进程同时忽略它,它被取消。

另一方面,如果您(或正在运行的进程)更改了终端设置,使得 Ctrl+C 不会被解释为产生信号的组合键,那么该进程将从输入中读取 Ctrl+C。当然,会发生什么取决于进程如何处理它读取的输入。

简而言之,如果您没有更改默认行为SIGINT并且您没有更改终端的设置,则 Ctrl+C raises SIGINT; 默认操作是终止进程,因此套接字将关闭并终止连接。

于 2015-06-11T16:23:33.787 回答