如何在Linux/OS X上优雅地终止Firefox进程

15
我正在使用Firefox进行一些自动化操作,虽然我可以从Shell打开Firefox窗口,但我无法正确地终止它。如果我使用kill -3kill -2命令杀死Firefox进程,下次打开新的Firefox窗口时,它会询问我是否要运行安全模式。我知道调用kill -9可能会让Firefox混淆,因此它会尝试在安全模式下运行,但-3应该没问题。
你有没有任何想法如何告诉Firefox正确关闭?

2
你应该只需要使用:kill pid。默认信号是SIGTERM,大多数进程应该能正确处理。 - Cillier
1
我知道,但它不能在Firefox中工作。它会认为程序已经崩溃了。 - martin
那么 firefox 就无法正确处理 SIGTERM - scai
尝试使用其他一些信号:在Mac OSX上使用kill -30SIGUSR1)或在Linux上使用kill -10kill -12SIGUSR1SIGUSR2)。Firefox 可能会对它们做出更好的响应。 - chepner
使用进程 ID,如果您使用kill -KILL <pid>,它应该可以工作。 - TheDarkKnight
@Merlin069:我说的是“轻一点” :)。 - martin
8个回答

17

您可以使用pkill和进程名一起使用:

pkill -f firefox

2
我确实尝试了“pkill”。它没有显示安全模式对话框窗口,但它仍然认为所有先前打开的选项卡崩溃了。 - martin
1
请参考此答案:http://support.mozilla.org/en-US/questions/752748。它说:“看起来Firefox在收到SIGTERM信号后会干净地关闭,所以如果你只是使用`pkill firefox`,那应该可以解决问题。如果有多个实例正在运行,而您只想关闭一个实例,则可以使用类似于pgrep -f [PROFILE] | xargs kill的命令。 - anubhava
1
是的,它看起来终止得很好,但实际上并没有。也许在更近期的Firefox版本中已经改变了。那个线程是从2010年开始的。也许这是一些OS X特定的问题。 - martin
1
嗯,可能是这样。我有OSX,让我自己试一些命令。 - anubhava

8

你能行吗?

wmctrl -c "Mozilla Firefox"

你想要的是这个吗?

注意:

  1. 这个命令可能需要在相同的DISPLAY和可能在您的Firefox运行的同一虚拟桌面中触发。
  2. 只有第一个匹配的窗口将被关闭。您可能需要循环执行此命令。

1
我在OSX上没有任何wmctrl - anubhava
好的...这个软件包是为Linux系统设计的。但是可能有一些类似目的的替代工具适用于OSX系统。显然,它不能直接在OSX上编译 - anishsane
wmctrl 用于 X Windows。虽然 Mac OS X 可以使用 X Windows,但主要的 GUI 不是基于它的。 - chepner
这是在Ubuntu下正确关闭Firefox的唯一方法。我之所以说Firefox,是因为当它没有被正确关闭时,很容易看到其结果:还原页面。 - sinekonata

3

稍微温和一点

如@skybert在评论中指出的,您可以在about:config中将browser.sessionstore.resume_from_crash设置为false

这样做可以摆脱“哎呀,出了点问题...”的提示信息。

要摆脱安全模式消息,您可以设置配置

toolkit.startup.max_resumed_crashes-1

或(只需设置)环境变量MOZ_DISABLE_AUTO_SAFE_MODE

不那么温和

如果没有更好的解决方案,在killall之后从配置文件夹中删除sessionstore.js

这并不比您的解决方案更加“温和”,但它可以修复“安全模式”消息:

来源:https://support.mozilla.org/en-US/questions/817752


1
有一个更温和的解决方案,您可以在Firefox中输入“about:config”,并将“browser.sessionstore.resume_from_crash”设置为“false”。这将使您摆脱“糟糕,出了些问题...”的消息。 - skybert
@skybert:谢谢,评论已经合并。 - serv-inc

3

在Mac OS X中,您可以使用AppleScript关闭它(根据需要调整应用程序名称;我没有安装FireFox进行测试):

$ osascript -e 'tell application "FireFox"
quit
end tell'

这应该触发与“退出”菜单命令触发相同的事件,因此FireFox应该正常关闭。
显然,在Linux中无法使用此方法。

2
不错,这按预期工作。Firefox 可以顺利关闭和重新打开。虽然我希望能找到跨平台的解决方案,但如果没有其他办法,我会使用这个方法。 - martin
请看我对你的问题的评论;它们只是猜测,所以我没有将它们添加到答案中。 - chepner

2
在OSX中使用Firefox:
killall 'firefox'

2

您可以首先使用以下命令获取Firefox的Pid:

pgrep firefox

在使用完火狐浏览器后,可以使用kill命令来停止浏览器。具体操作为:kill [pid]。

kill `pgrep firefox`

1
这与pkill相同,只是您的解决方案无法正确处理多个正在运行的Firefox进程。 - scai
在OS X中不可用pgrep - chepner
我想是这样的。或者可能是我通过Mac端口安装的,我不记得了。 - martin
可能是MacPorts或其他第三方机制。 - chepner

0

你可以通过 kill 和 PID 关闭 Firefox

#!/bin/bash

firefox & PID=$! # 启动 Firefox 并获取 PID 以便日后使用

运行 Firefox 一段时间

kill -15 $PID # 软关 Firefox


0

在此之后运行 xkill 命令,然后点击要关闭的窗口

    xkill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接