Linux:使用命令行关闭程序(不杀死它)


21

某些应用程序仅允许一个正在运行的实例(例如eclipse,如果您想使用同一工作区)。因此,如果我从其他位置登录,则必须杀死/关闭以前从其他位置登录时打开的应用程序。

我总是使用kill命令杀死正在运行的进程。但是,如果您杀死一个进程,则可能不会保存一些对将来使用有用的状态。但是,例如,如果通过单击关闭按钮正确“关闭”它,它将正确保存状态。

有没有办法从命令行适当地“关闭”应用程序?我知道这可能因应用程序而异,所以让我们更通用一点:如何向另一个正在运行的应用程序发送信号,并且该信号的工作方式就像单击顶部栏中的“关闭”按钮一样?


2
我们是否应该假设使用VNC远程访问桌面,然后以图形方式单击“关闭”会产生太多开销。
布赖恩·斯威夫特

Answers:


33

默认情况下,kill命令将向SIGTERM正在运行的进程发送(终止信号)。与会SIGKILL强行杀死进程而没有任何响应的机会不同,该SIGTERM信号可以被进程拦截,从而使其优雅终止。它是否确实正常终止完全取决于进程本身。它可以轻松杀死自己或完全忽略信号。

您可以SIGTERM通过在命令行上使其显式来确保发送而不是其他信号:

kill -s TERM <pid>

1
是的,OP的前提是错误的。该kill命令尝试正常关闭。如果在这种情况下无法正常关闭应用程序,则该应用程序已损坏。(而且绝大多数应用程序都没有中断。)
David Schwartz 2012年

2
Firefox似乎(损​​坏)。如果运行kill -s TERM <firefox-pid>,它将无法正常关闭,当我再次启动它时,它将询问我是否要恢复崩溃的会话。:sigh:
Wilson F

6

请注意,使用pkill而不是kill来指定TERM时,语法为:

pkill -TERM <process-name>

pkill 就像kill一样,但是您可以使用进程名称而不是id。 man pkill

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.