2017-07-24 29 views
3

正如標題所說,我想發送一個運行函數到後臺。類似於在bash中發送一個運行函數到背景

function myfunc { 
    some_command | while read line 
    #some_command must be running indefinitely 
    do 
     #if some condition on ${line} satisfies 
     #Do something and go to background 
    done 
} 

這可能嗎?

我知道有可能直接調用函數&直接在後臺運行它。這很明顯。這不是this的重複。

+0

[在從腳本後臺執行外殼命令]的可能的複製(HTTPS://計算器.com/questions/3683910 /執行命令在後臺從腳本) – Aserre

+1

你爲什麼要這樣做?你可以調用你的函數形式爲一個單獨的bash腳本,並用&符號來調用它。然後你的功能在後臺運行。 – schorsch312

+0

爲什麼不'而真實;如果...;然後do_something&break; fi' –

回答

3

一個簡單的命令在後臺創建一個進程並等待其終止,在您的情況下,當持續運行的被調用者異步滿足條件時,調用者必須繼續。

這可以用殺-STOP進行(呼叫者塊自己)和殺-CONT(被叫解鎖呼叫者)

function myfunc { 
    some_command | while read line 
    #some_command must be running indefinitely 
    do 
     #if some condition on ${line} satisfies 
     kill -CONT $$ 
    done & kill -STOP $$ 
} 
+0

太棒了!最後,有人瞭解我。 :D –

+0

僅供參考,'function'關鍵字使得這些代碼不必要地不符合POSIX sh規範 - 如果第一行是'myfunc(){',使用'function'關鍵字,它可以移植到更廣泛的shell中刪除並添加'()'語法。 –