サーバーを実行するためのbashスクリプトがあります。これは通常、ユーザーがを使用して終了しますCtrl-C
。終了時にクリーンアップ関数を実行しますが、これは1秒で中断されることはありませんCtrl-C
。
#!/bin/bash
...
function cleanup {
trap '' INT
echo -n " Cleaning up..."
scp $SRV:~/$DIR/server.log . && ssh -t $SRV "rm -rf ~/$DIR"
echo " Finished."
exit 0
}
trap cleanup EXIT
...
現時点ではCtrl-C
、scp
が終了する1秒前にスクリプトが無期限にハングします。これはSIGINT
bashスクリプトとscp
プロセスの両方に送信されることと関係があることは理解していますが、クリーンアップが失敗するだけでなく、これによりスクリプトがハングする原因については迷っています。
だから私の質問は:
- なぜこれによりスクリプトがハングするのですか?
- どのように私は達することからSIGINTを防ぐことができます
scp
し、ssh
子プロセスを?
scp ...
スクリプトecho
が呼び出される前にスクリプトがハングします。そして、set -x
どのコマンドが呼び出されるかを示すと、&& ssh ...
パーツも呼び出されないことがわかります。