プロセス残留事件
負荷試験をしていたので複数台のサーバーの状態を調べるため、バックグラウンドプロセスで複数のsshを実行していました。
monitor(){
host=$1
ssh $host "while true;do uptime;sleep 5;done" > $host.log
}
monitor host_a &
monitor host_b &
monitor host_c &
wait
データ取り終わってctrl + c
をしたら、sshのプロセスが全部残ってました。てへ。
ps aux | grep ssh
して拾ったPIDを使ってプロセスを殺しました。メンドクサイ。
解決法
monitor(){
host=$1
# このsshを非同期にする
ssh $host "while true;do uptime;sleep 5;done" > $host.log &
}
# 関数実行を非同期にするとkillでsshが死なないのでこれを非同期にしない
monitor host_a
monitor host_b
monitor host_c
# いつ殺すかを自由に決めたいので標準入力で待機
echo "press any key."
read tmp
# 殺します
kill $(jobs -p)