2012-10-16 54 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}