相关疑难解决方法(0)

SIGINT如何与其他终止信号相关?

在POSIX系统上,终止信号通常具有以下顺序(根据许多MAN页面和POSIX规范):

  1. SIGTERM - 礼貌地要求进程终止.它将正常终止,清理所有资源(文件,套接字,子进程等),删除临时文件等.

  2. SIGQUIT - 更有力的请求.它应该终止不正常,仍然清理绝对需要清理的资源,但可能不会删除临时文件,可能会在某处写入调试信息; 在某些系统上也会写入核心转储(无论信号是否被应用程序捕获).

  3. 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?如果是这样,那将是什么原因以及如何处理不同?

unix linux posix

95
推荐指数
4
解决办法
5万
查看次数

Linux C捕获kill信号以便正常终止

我有一个使用套接字,数据库连接等的进程.它基本上是在传感器数据和Web界面之间进行中继的服务器进程,因此确保应用程序(如果被杀死)正常终止是很重要的.

我如何处理意外的异常,例如段错误(至少用于调试)以及杀死信号,以便我可以关闭任何连接并停止任何线程运行,以便进程不会留下任何正在使用的东西?

c linux kill

16
推荐指数
3
解决办法
3万
查看次数

Windows(或Linux)中的不间断进程?

有没有办法让程序无法中断(一个不间断的程序)?通过这个,我的意思是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 hook signal-processing interrupt interrupt-handling

10
推荐指数
1
解决办法
1781
查看次数

虽然没有收到信号?

所以我最近一直在用C编程并研究Signals和POSIX线程.我知道我可以在一个线程中等待一个信号,但我一直想知道是否有可能有一个包含一个while循环的线程,该循环将在未收到SIGINT时继续执行.所以基本上我不是在等待信号(停止执行while循环),而是继续执行直到收到信号.只是听一定的信号.

我试过谷歌搜索但无济于事.

有什么建议?提前致谢!!

c linux posix signals pthreads

5
推荐指数
1
解决办法
1234
查看次数

通过 unix 信号优雅地终止 Qt 应用程序

我在我的应用程序中保存设置时遇到问题。这是在相关对象的析构函数中完成的。它是一个启动器,通过关闭终止是标准情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我猜这只会关闭所有窗口)。甚至sudo reboot可以防止 Qt 应用程序展开堆栈上的对象。终止killall -s <signal> <app>SIGINT,SIGKILL和具有相同的效果SIGTERM。如何强制我的 qt 应用程序优雅地终止于 on SIGTERMaboutToQuit也不会发出。

c++ qt signals terminate

5
推荐指数
1
解决办法
4315
查看次数