Shell
bash 中帶有兩個同時命令的 Ctrl-C
我想在 Linux 機器上同時在 bash 中執行兩個命令。因此,在我的
./execute.sh
bash 腳本中,我輸入了: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
函式替換,該函式會殺死所有這些程序。