当我关闭我的 minecraft 时,它从来没有完全关闭,我一直在寻找解决方案,但没有找到。过了一会儿,我放弃了,决定当我想关闭它时,我会手动关闭它。
如果我在终端中使用 pgrep 然后杀死它似乎没有影响,但是当我打开系统监视器并右键单击并杀死它时,它会很好地关闭。
系统监视器方式和终端方式有什么区别?系统监视器在后台执行 kill 命令不会执行的其他操作吗?
答案1
该命令与系统监视器的“kill”命令没有任何区别kill
。系统监视器只是给出了一些kill
我认为您不知道的参数。
当你 时kill <process-number>
,它实际上是向该进程发送一个信号,要求其干净地退出。这称为 SIGTERM。为了无条件地终止进程(可能导致数据丢失),你需要发送不同的信号:
kill -9 <process-number>
这会向进程发送 SIGKILL,从而立即结束其执行。系统监视器kill -9
在您要求“杀死”进程而不是简单地“关闭”进程时使用。
答案2
当使用终端终止应用程序时,我猜你运行了:
kill 1234
在系统监视器,您选择了该进程并选择向该进程发送 KILL。
默认情况下,使用普通方式时发送给进程的信号kill $pid
是TERM
。这允许应用程序正常终止。但是,当发送 时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。