linux – SIGINT如何与SIGTERM,SIGQUIT和SIGKILL等其他终止信号相关联?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – SIGINT如何与SIGTERM,SIGQUIT和SIGKILL等其他终止信号相关联?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2721字,纯文字阅读大概需要4分钟。
内容图文
![linux – SIGINT如何与SIGTERM,SIGQUIT和SIGKILL等其他终止信号相关联?](/upload/InfoBanner/zyjiaocheng/952/990f6d1ad69c487b9ff72a55091fdf69.jpg)
在POSIX系统上,终止信号通常具有以下顺序(根据许多MAN页面和POSIX规范):
> SIGTERM – 礼貌地要求进程终止.它将正常终止,清理所有资源(文件,套接字,子进程等),删除临时文件等.
> SIGQUIT – 更有力的请求.它应该终止不正常,仍然清理绝对需要清理的资源,但可能不会删除临时文件,可能会在某处写入调试信息;在某些系统上也会写入核心转储(无论信号是否被应用程序捕获).
> SIGKILL – 最强有力的要求.甚至没有要求该过程做任何事情,但系统将清理过程,无论是否喜欢.最有可能是编写核心转储.
SIGINT如何适应这张照片?当用户点击CRTL C时,CLI进程通常由SIGINT终止,但是使用KILL实用程序也可以通过SIGINT终止后台进程.我在规范或头文件中看不到的是SIGINT是否比SIGTERM更强或更强,或者SIGINT和SIGTERM之间有任何区别.
更新:
到目前为止我发现的终止信号的最佳描述是在GNU LibC Documentation.它很好地解释了SIGTERM和SIGQUIT之间的预期差异.
它说关于SIGTERM:
It is the normal way to politely ask a program to terminate.
它说关于SIGQUIT:
[…] and produces a core dump when it terminates the process, just like a program error signal.
You can think of this as a program error condition “detected” by the user. […]
Certain kinds of cleanups are best omitted in handling SIGQUIT. For example, if the program
creates temporary files, it should handle the other termination requests by deleting the temporary
files. But it is better for SIGQUIT not to delete them, so that the user can examine them in
conjunction with the core dump.
而SIGHUP也解释得很好. SIGHUP实际上不是终止信号,它只是意味着用户的“连接”已经丢失,因此应用程序不能指望用户读取任何进一步的输出(例如stdout / stderr输出),并且没有输入可以从用户不再.对于大多数意味着他们退出的应用程序.从理论上讲,应用程序还可以决定在收到SIGHUP时进入守护进程模式,现在作为后台进程运行,将输出写入已配置的日志文件.对于已经在后台运行的大多数守护进程,SIGHUP通常意味着他们将重新检查其配置文件,因此您在编辑配置文件后将其发送到后台进程.
但是在这个页面上没有有用的SIGINT解释,除了它是由CRTL C发送的.有没有理由为什么用SIGTERM以不同的方式处理SIGINT?如果是这样,那将是什么原因以及如何处理不同?
解决方法:
SIGTERM和SIGKILL旨在用于通用“终止此过程”请求. SIGTERM(默认情况下)和SIGKILL(始终)将导致进程终止. SIGTERM可能被进程捕获(例如,如果它想要它可以进行自己的清理),甚至完全忽略;但SIGKILL无法被捕获或忽略.
SIGINT和SIGQUIT专门用于来自终端的请求:可以分配特定的输入字符来生成这些信号(取决于终端控制设置). SIGINT的默认操作是与SIGTERM的默认操作和SIGKILL的不可更改操作相同的进程终止; SIGQUIT的默认操作也是进程终止,但可能会发生其他实现定义的操作,例如生成核心转储.如果需要,可以通过该过程捕获或忽略.
正如您所说,SIGHUP旨在表明终端连接已丢失,而不是终止信号.但是,同样,SIGHUP的默认操作(如果进程没有捕获或忽略它)是以与SIGTERM等相同的方式终止进程.
signal.h的POSIX定义中有一个表格,其中列出了各种信号及其默认操作和用途,General Terminal Interface章节包含有关终端相关信号的更多详细信息.
内容总结
以上是互联网集市为您收集整理的linux – SIGINT如何与SIGTERM,SIGQUIT和SIGKILL等其他终止信号相关联?全部内容,希望文章能够帮你解决linux – SIGINT如何与SIGTERM,SIGQUIT和SIGKILL等其他终止信号相关联?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。