作為一個群體來控制 bash 工作?

作為一個群體來控制 bash 工作?

有沒有辦法控制給定bash會話中的一組作業?

理想情況下,我想說的是:

$ prog1 &   
$ GROUP=FOO prog2 &
$ GROUP=FOO prog3 &
$ GROUP=BAR prog4 &

然後讓例如kill %FOO僅終止prog2prog3

答案1

有沒有辦法在給定的 bash 會話中控制一組作業?

就在這裡! - 使用陣列形成組,並使用捕獲每個進程 ID$!並將其附加到數組中。

$!是一個POSIX指定的特殊參數,它給出最近後台命令的十進制進程 ID。

以下是有關如何在 Bash 中附加到數組並在問題上下文中列舉它們的教程:

首先聲明數組:

$ GROUP_FOO=()
$ GROUP_BAR=()

不屬於群組的工作:

$ prog1 &

若要進入 FOO 群組的作業(+=符號表示該值應附加到陣列中):

$ prog2 &
$ GROUP_FOO+=($!)

FOO 小組的另一份工作:

$ prog3 &
$ GROUP_FOO+=($!)

BAR 組的工作內容:

$ prog4 &
$ GROUP_BAR+=($!)

若要終止 FOO 群組進程:

$ for id in ${GROUP_FOO[@]}; do kill $id; done

腳本版本

如果我編寫這個腳本,我會稍微修改一下,以便進程 ID 僅在成功啟動時添加到數組中:

prog2 & sleep 0.1; kill -0 $! && GROUP_FOO+=($!)

這樣,您的陣列中不太可能出現未運行的進程 ID,因為它們立即因錯誤而退出。 0.1 秒的睡眠延遲(甚至可能是 0.01 秒)為進程提供了退出並顯示錯誤代碼的時間。

相關內容