如何通过终端软销GUI应用程序?


22

有没有一种方法可以以友好的“ 请立即退出 ”方式关闭GUI应用程序,而无需通过图形方式访问应用程序窗口?

例如,如果Gnome / X显示崩溃为黑色,我想切换到tty2并以某种方式关闭诸如firefox的应用程序,以使其保存配置等。

Answers:


19

通常,您可以使用SIGHUP来“友好”关闭应用程序(带有或不带有图形界面)。

kill -HUP <application_pid>

编辑:添加了一些其他信息

SIGHUP的处理方式取决于应用程序,因此,正如Dave指出的那样,可能会屏蔽或处理此信号。但是,相当多的交互式应用程序都通过 SIGHUP正常退出。

另一方面,我必须承认通常我遵循以下模式:

kill -HUP <application_pid>
# check if application is still running
kill -INT <application_pid>
# check if application is still running
kill -KILL <application_pid>

显然,最后一个命令不是那么“友好”。


3
如果您不知道应用程序的PID,则可以使用它pkill来指定可执行文件的名称。例如:pkill -HUP firefox-bin
Caleb

@Dave:有趣的是,我发现这相关,它暗示了一个相似但恢复的顺序:TERM-> INT-> HUP(请注意年龄)。也许我会记住HUP-> INT-> TERM,因为KILL似乎对我并不友好。谢谢大家。
jfk

@Caleb,请小心在多个具有相同名称的进程的地方:pkill将全部杀死。例如,运行几次以进行一些后台处理:sed "s/Woo/woo/" < /dev/urandom >> /dev/null &。然后做pkill -HUP sed。您将杀死您启动的sed的所有实例以及执行有用工作的所有其他实例。
ahcox 2015年

此外,@ Caleb pkill还将杀死一些您不希望看到的应用程序:例如,如果您chromium正在运行,并且想要杀死一个名为的程序rompkill它将很乐意被击落chromium。更好地使用killall,它只会匹配确切的名称(但是在Solaris上不会,因为它实际上会杀死所有进程)。
罗斯兰

@Ruslan或用于pkill -x获取完全匹配而不是部分匹配。我个人利用部分匹配来保存键入内容,但是您必须知道该工具的作用。是的,默认情况下它匹配部分字符串。另一个有用的选择是-f与完整的命令行匹配,而不是与之匹配$0
加勒布

5

您可能要尝试:

kill -TERM <pid>

要么

kill -TERM `pidof <application_name>`

至少在某些系统上,当系统正处于关闭状态时,所有进程都将在发送KILL(9)信号之前发送TERM(15)信号。HUP通常只是导致应用程序重新加载其配置,但是在逐个过程的基础上可能有所不同。


2

没有通用的方法告诉应用程序退出并保存其配置。可能存在使用特定框架来通知应用程序的方法,例如dcop kfoo MainApplication-Interface quit对于某些KDE 3应用程序。请注意,该应用程序可能会显示一个对话框,要求您进行确认。

如果X显示无法使用,请终止X服务器。按Ctrl+ Alt+ BackSpace; 如果不起作用,请使用杀死X服务器进程sudo pkill -x Xorg。当X服务器死机时,所有X应用程序都会收到通知,并且它们将尝试正常退出(不能保证它们将保存所有内容,但这是您最好的选择)。


我不知道这些应用程序会被通知还是被杀死。而且由于Fedora上的键组合默认情况下未启用.....我现在知道如何通过命令行将其杀死!
jfk

1

类似于@andcoz的答案,如果您不知道应用程序的PID(我假设您根本不了解它),请尝试以下操作:

kill -HUP `pidof [application_name]`

2
迈出第一步,然后尝试pkill -HUP [application_name]:)
Caleb

刚学过的技巧和pgrep:D
jfk

1

您可能要考虑的另外两个命令是wmctrl -cxdotool windowkill。我不确定windowkill您所追求的到底是不是真的,如果不是的话,您可能会对windowdelete补丁感兴趣。

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.