Shell

bash 中帶有兩個同時命令的 Ctrl-C

  • November 17, 2019

我想在 Linux 機器上同時在 bash 中執行兩個命令。因此,在我的./execute.shbash 腳本中,我輸入了:

command 1 & command 2
echo "done"

但是,當我想停止 bash 腳本並點擊Ctrl+C時,只會停止第二個命令。第一個命令繼續執行。如何確保停止完整的 bash 腳本?或者在任何情況下,我如何停止這兩個命令?因為在這種情況下,無論我多久按一次Ctrl+C命令都會繼續執行,我不得不關閉終端。

如果你輸入

command 1 & command 2

這等於

command 1 &
command 2

即這將在後台執行第一個命令,然後在前台執行第二個命令。特別是這意味著,即使仍在執行,您也會在完成echo "done"後列印。command 2``command 1

你可能想要

command 1 &
command 2 &
wait
echo "done"

這將在後台執行這兩個命令並等待它們完成。


如果您按 CTRL-C,這只會將 SIGINT 信號發送到前台程序,即command 2在您的版本或wait我的版本中。

我建議設置這樣的陷阱:

#!/bin/bash

trap killgroup SIGINT

killgroup(){
 echo killing...
 kill 0
}

loop(){
 echo $1
 sleep $1
 loop $1
}

loop 1 &
loop 2 &
wait

使用陷阱,由 CTRL-C 產生的 SIGINT 信號被擷取並被killgroup函式替換,​​該函式會殺死所有這些程序。

引用自:https://unix.stackexchange.com/questions/107400