使用系统监视器和终端终止进程有什么区别?

使用系统监视器和终端终止进程有什么区别?

当我关闭我的 minecraft 时,它从来没有完全关闭,我一直在寻找解决方案,但没有找到。过了一会儿,我放弃了,决定当我想关闭它时,我会手动关闭它。

如果我在终端中使用 pgrep 然后杀死它似乎没有影响,但是当我打开系统监视器并右键单击并杀死它时,它会很好地关闭。

系统监视器方式和终端方式有什么区别?系统监视器在后台执行 kill 命令不会执行的其他操作吗?

答案1

该命令与系统监视器的“kill”命令没有任何区别kill。系统监视器只是给出了一些kill我认为您不知道的参数。

当你 时kill <process-number>,它实际上是向该进程发送一个信号,要求其干净地退出。这称为 SIGTERM。为了无条件地终止进程(可能导致数据丢失),你需要发送不同的信号:

kill -9 <process-number>

这会向进程发送 SIGKILL,从而立即结束其执行。系统监视器kill -9在您要求“杀死”进程而不是简单地“关闭”进程时使用。

SuperUser Stack Exchange 上的这个答案应该有帮助

答案2

当使用终端终止应用程序时,我猜你运行了:

kill 1234

系统监视器,您选择了该进程并选择向该进程发送 KILL。

默认情况下,使用普通方式时发送给进程的信号kill $pidTERM。这允许应用程序正常终止。但是,当发送 时KILL,程序会立即消失,没有机会彻底关闭(即保存数据)。要从命令行发送 KILL 信号,请使用:

kill -KILL 1234

(运行此命令的另一种方法是kill -9 1234,这只是一个偏好问题)

答案3

这是因为默认情况下,您的 pgrep kill 会发送 SIGTERM(终止)。如果应用程序状态不佳,则 SIGTERM 将不起作用。系统监视器中的“Kill Process”会发送 SIGKILL 命令,该命令实际上会将其杀死。它们是发送的两个不同信号。如果您想使用 pgrep 执行此操作,您可以使用kill -9,该-9选项会发送 SIGKILL 信号,然后与系统监视器的“Kill Process”所做的完全相同。

仅供参考,该命令的名称kill有点误导。man kill说:

kill—向进程发送信号

这可以是任何信号。要查看所有信号列表,请键入man --sections=7 signal并向下滚动。

然后说:

终止的默认信号是 TERM。

https://askubuntu.com/a/716814/11929了解更多信息。

相关内容