2012-10-16 80 views
2

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

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

firefox www.example.com 

我已阅读,搜索所有的Firefox实例,并关闭它们手动我可以这样写:

ps aux | grep firefox 
pidof firefox 
kill #process# 

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

回答

1

您可以使用jobs来获取所有正在运行的进程的ID从外壳(例如,您的脚本中)

#!/bin/bash 

firefox www.example.com & 
PID=`jobs -p` 

kill $PID 

help jobs的选择开始。请注意0​​列表所有进程从此shell开始,因此如果您按照此方法并希望终止多个进程,则可能需要对jobs的输出执行一些额外的分析以找到正确的进程。

+0

此外,这引入了一个糟糕的竞争条件,如果已启动的实例和PID的已保存为“PID”的实例在调用kill之前已经终止**并且**另一个进程在此期间获得了此pid。那么错误的过程将被'杀死'! – alk

+0

@leenremm:在Brian的答案中也有很多,当你启动多个进程时,它的效果会更好。另外,Brian和我的答案都有一个竞争条件,正如alk指出的那样。 –

1

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

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

如果你担心Firefox的退出和一些其他进程被分配$ {} PID的平均时间,你可以杀更改为类似以下,以降低风险:

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