![什么是终止进程的非攻击性方法?](https://linux22.com/image/87635/%E4%BB%80%E4%B9%88%E6%98%AF%E7%BB%88%E6%AD%A2%E8%BF%9B%E7%A8%8B%E7%9A%84%E9%9D%9E%E6%94%BB%E5%87%BB%E6%80%A7%E6%96%B9%E6%B3%95%EF%BC%9F%20.png)
我想通过命令行(例如 Firefox 或 Thunderbird)关闭程序。该程序运行良好,理论上我可以直接选择“文件”>“关闭”。但是,我想通过命令行来执行此操作,因此这不是一个选项。我可以终止该进程(例如pkill firefox
),但从它的声音来看,这是关闭程序的相当残酷的方式。事实上,我习惯于将此作为最后的手段,尤其是当程序挂起时。老实说,我不知道这是否是退出程序的正确方法。是吗?或者有更好的方法来关闭程序吗?
答案1
kill
向进程发送信号,默认发送 TERM 信号。 TERM 信号可以被进程“捕获”,即它们可以监视它,并且当接收到它时它们可以采取行动。
在许多情况下,Linux 进程在发送 TERM 信号时会正常运行 - 即它们会自我整理然后干净地关闭。假设开发人员已经正确处理了这种情况,那么这kill
是关闭许多进程的完全有效的方法。
它是否适用于任何给定的流程取决于开发人员。
只有一些信号(例如 KILL)无法被捕获,您通过kill
运行来发送 KILL kill -9
,这对进程的破坏性更大,因为它们没有机会进行清理。
答案2
用作kill -15 [pid/name]
允许进程执行清理的“正常”终止
用作kill -9 [pid/name]
“覆盖”终止,立即终止进程。
答案3
可以模拟窗口关闭。但我不确定如何可靠地识别窗口。 (即杀死firefox而不杀死gedit firefox-bug.txt
)。正如所评论的,基本的权衡是您是否想要鼓励用户交互(密切确认对话)。