Linux如何终止进程

问题描述 投票:0回答:2

我想了解有关进程终止的一些详细信息。谢谢。进程是否有诸如pthread之类的取消点?如果是,那是什么? SIGKILL是否考虑这些取消点?信号是否更改过程状态以运行信号处理程序?如果是,这是否意味着一个进程永远不会在不获取CPU时终止自身。

linux process linux-kernel pthreads sigkill
2个回答
1
投票
默认情况下,所有进程终止命令都使用“ SIGTERM”,它允许程序在退出之前运行某些代码,从而允许其“优雅地”终止。

如果要强制终止该过程,则可以改用“ SIGKILL”。


0
投票
进程是否具有pthread之类的取消点?
编号

SIGKILL是否考虑了这些取消点?

不,因为没有。 SIGKILL交付给进程后,它就会死亡。如果它在等待任何系统调用完成,则这些等待将被中断。没有线程会进行任何进一步的计算进度或执行任何清除,但是通常仍会发生由OS执行的终止终止清除(关闭打开的文件,释放内存等)。无法捕获,阻止或忽略SIGKILL

比较SIGTERM,这比较温和。当进程接收到一个SIGTERM时,可以通过阻塞它来推迟它,也可以通过忽略它来阻止它,结果取决于是否为它注册了一个信号处理程序。如果是这样,那么被选择用来接收信号的线程正在执行的任何系统调用都会被中断,并调用信号处理程序。附加效果是特定于程序的。如果未注册任何处理程序,则程序将跳过执行干净的终止,包括在实际终止之前调用已注册的退出处理程序。

信号更改过程状态是否要运行信号处理程序?

我不确定您的意思是什么,但是在SIGKILL情况下不会调用任何信号处理程序。但是,更广泛地说,当信号处理程序确实运行时(例如在SIGTERM情况下可能发生),它们相对于它们所运行的线程的执行是异步的。

如果是,这是否意味着进程从不获取CPU时也不会终止自身。

通过向其传递SIGKILL终止过程不需要过程的任何合作。涉及的所有重要操作均由内核执行,并且由于它负责调度执行资源,因此您无法轻易拒绝内核所需的任何CPU时间。

另一方面,将SIGTERM传递给进程并不总是成功地使其终止。该过程可以阻止或忽略信号,也可以在不终止的情况下对其进行处理。即使它不执行任何操作,它的退出处理程序(如果有的话)也将在终止之前运行,并且这些操作可能会无限期地延迟其实际终止。原则上,可以通过阻止在任何CPU时间安排进程来阻止终止。

© www.soinside.com 2019 - 2024. All rights reserved.