【问题标题】:Opening and closing a process using bash使用 bash 打开和关闭进程
【发布时间】:2012-10-16 08:10:21
【问题描述】:

使用 Ubuntu,我想为 Ubuntu 服务器创建一个 shell 脚本 (bash),它会打开一个 firefox 实例,然后关闭 那个 浏览器的特定实例?

要打开一个firefox的实例,我可以这样写:

firefox www.example.com

我已经阅读了搜索所有 firefox 实例并手动关闭它们我可以写:

ps aux | grep firefox
pidof firefox
kill #process#

但是有没有办法让我搜索我在开始时打开的 特定 Firefox 实例?

【问题讨论】:

    标签: bash firefox unix process kill


    【解决方案1】:

    您可以使用 jobs 获取从该 shell 启动的所有正在运行的进程的 ID(例如,在您的脚本中)

    #!/bin/bash
    
    firefox www.example.com &
    PID=`jobs -p`
    
    kill $PID
    

    有关选项,请参阅help jobs。请注意,jobs 列出了从此 shell 启动的所有进程,因此,如果您遵循这种方法并想要杀死多个进程,您可能需要对来自 jobs 的输出进行一些额外的解析以找到正确的过程。

    【讨论】:

    • 此外,如果已经启动且 pid 保存到 PID 的实例在调用 kill 另一个之前已经终止,这也会引入一个可怕的竞争条件进程同时分配了这个非常PID。那么错误的进程将是killed!
    • @leenremm:对 Brian 的回答也采取了很多措施,当您启动多个进程时效果会更好。此外,正如 alk 所指出的那样,Brian 和我的回答都有竞争条件。
    • 如果您已经打开了 Firefox 窗口,则它不起作用。似乎新启动的进程合并到现有进程中,其原始pid从jobs -p消失了@
    【解决方案2】:

    在后台启动进程,并记住它的 pid。

    #!/bin/bash
    firefox www.example.com &
    declare -i PID=$!
    # blah, blah, blah
    kill ${PID}
    

    如果您担心 firefox 退出并且其他一些进程同时被分配 ${PID},您可以将 kill 更改为以下内容以降低风险:

    ps -p ${PID} | fgrep firefox && kill ${PID}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多