【发布时间】:2014-03-31 21:50:28
【问题描述】:
是否可以使用 C++ 程序来监视哪些进程被杀死(被用户或操作系统杀死),或者进程是否由于某些其他原因而终止,这些原因不是分段错误或非法操作,然后执行一些操作?
【问题讨论】:
-
您可以在一个循环中列出所有进程。这样您就会知道其中一个何时终止,因为它将不再列出。
是否可以使用 C++ 程序来监视哪些进程被杀死(被用户或操作系统杀死),或者进程是否由于某些其他原因而终止,这些原因不是分段错误或非法操作,然后执行一些操作?
【问题讨论】:
简短的回答,是的,这是可能的。
长答案:
您将需要为可能终止进程的不同信号实现信号处理程序。您不一定能捕获每种类型的信号(特别是,无法捕获 SIGKILL ,因为这可能会使进程无法杀死)。
使用sigaction 函数调用来设置您的信号处理程序。
这里有一个不错的信号列表(从顶部向下大约 1/3): http://pubs.opengroup.org/onlinepubs/7908799/xsh/signal.h.html
编辑:抱歉,您的意思是在流程内,而不是从流程外。如果您“拥有”该过程,则可以使用ptrace 和PTRACE_GETSIGINFO 来获取信号。
一般来说“找到被杀死的进程”是相当困难的——或者至少要区分那些只是自行退出的进程,而不是那些因为其他原因被杀死的进程。
【讨论】: