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