在POSIX系统上,终止信号通常具有以下顺序(根据许多MAN页面和POSIX规范):
SIGTERM - 礼貌地要求进程终止.它将正常终止,清理所有资源(文件,套接字,子进程等),删除临时文件等.
SIGQUIT - 更有力的请求.它应该终止不正常,仍然清理绝对需要清理的资源,但可能不会删除临时文件,可能会在某处写入调试信息; 在某些系统上也会写入核心转储(无论信号是否被应用程序捕获).
SIGKILL - 最有力的要求.甚至没有要求该过程做任何事情,但系统将清理过程,无论是否喜欢.最有可能是编写核心转储.
SIGINT如何适应这张照片?当用户点击CRTL + C时,CLI进程通常由SIGINT终止,但是后台进程也可以由SIGINT使用KILL实用程序终止.我在规范或头文件中看不到的是SIGINT是否比SIGTERM更强或更强,或者SIGINT和SIGTERM之间有任何区别.
更新:
到目前为止,我发现的终止信号的最佳描述是在GNU LibC文档中.它很好地解释了SIGTERM和SIGQUIT之间存在预期的区别.
它说关于SIGTERM:
这是礼貌地要求程序终止的正常方式.
它说关于SIGQUIT:
[...]并在终止进程时生成核心转储,就像程序错误信号一样.您可以将此视为用户"检测到"的程序错误情况.[...]在处理SIGQUIT时最好省略某些类型的清理.例如,如果程序创建临时文件,它应该通过删除临时文件来处理其他终止请求.但是SIGQUIT最好不要删除它们,以便用户可以与核心转储一起检查它们.
而SIGHUP也解释得很好.SIGHUP实际上不是终止信号,它只是意味着用户的"连接"已经丢失,因此应用程序不能指望用户读取任何进一步的输出(例如stdout/stderr输出),并且没有输入可以从用户不再.对于大多数意味着他们退出的应用程序.从理论上讲,应用程序还可以决定在收到SIGHUP时进入守护进程模式,现在作为后台进程运行,将输出写入已配置的日志文件.对于已经在后台运行的大多数守护进程,SIGHUP通常意味着他们将重新检查其配置文件,因此您在编辑配置文件后将其发送到后台进程.
但是,除了CRTL + C发送的SIGINT之外,此页面上没有有用的SIGINT解释.是否有理由以不同于SIGTERM的方式处理SIGINT?如果是这样,那将是什么原因以及如何处理不同?
我有一个使用套接字,数据库连接等的进程.它基本上是在传感器数据和Web界面之间进行中继的服务器进程,因此确保应用程序(如果被杀死)正常终止是很重要的.
我如何处理意外的异常,例如段错误(至少用于调试)以及杀死信号,以便我可以关闭任何连接并停止任何线程运行,以便进程不会留下任何正在使用的东西?
有没有办法让程序无法中断(一个不间断的程序)?通过这个,我的意思是a process that can't be terminated by any signal, kill command, or any other key combinations
在任何系统:Linux,Windows等.
首先,我有兴趣知道它是否可能.如果是,那么可能的范围是什么?
我主要用C,C++和python编写代码; 但我不知道这些编程语言中有任何这样的命令.
是否可以使用汇编语言,以及如何使用?或者使用嵌入式汇编代码(内联汇编)的高级语言c?
我知道有些信号可以捕获,有些信号不像SIGKILL和SIGSTOP.
我记得,当我some viruses couldn't be terminated even from Task Manager.
习惯使用Windows-XP时,我想在低级语言中可能有一些解决方案.也许通过重写中断向量表.
我们可以使用TSR(挂钩)编写一个不间断的程序吗?因为TSR只能在重新启动计算机时或者从内存中明确删除TSR时删除.我对么?
我在Google上找不到任何东西.
所以我最近一直在用C编程并研究Signals和POSIX线程.我知道我可以在一个线程中等待一个信号,但我一直想知道是否有可能有一个包含一个while循环的线程,该循环将在未收到SIGINT时继续执行.所以基本上我不是在等待信号(停止执行while循环),而是继续执行直到收到信号.只是听一定的信号.
我试过谷歌搜索但无济于事.
有什么建议?提前致谢!!
我在我的应用程序中保存设置时遇到问题。这是在相关对象的析构函数中完成的。它是一个启动器,通过关闭终止是标准情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我猜这只会关闭所有窗口)。甚至sudo reboot
可以防止 Qt 应用程序展开堆栈上的对象。终止killall -s <signal> <app>
于SIGINT
,SIGKILL
和具有相同的效果SIGTERM
。如何强制我的 qt 应用程序优雅地终止于 on SIGTERM
?aboutToQuit也不会发出。