noise

計算機科学や各種設定のメモ

特定の端末のセッションリーダーを kill するシェルスクリプト

これを用いると ssh-agent や screen などの入れ子内にあるシェルから一気に上位ににあるシェルまでを終了させることができます。

引数なしで呼び出すとログイン中のユーザーが使用している端末をすべて表示します。

引数に端末名を指定するとその端末の持っているセッションリーダーであるプロセスに対し SIGHUP を送信します。
コード

#!/usr/bin/env sh

if [ $# = 0 ]
then
  ps j | awk '{ if (NR != 1) print $5 }' | sort -u
else
  tty_name=`echo $1 | sed -e "s/\//\\\\\\\\\\//g"`
  kill -HUP `ps j | awk '{if (NR != 1 && $5 ~ /'$tty_name'/ && $7 ~ /S/) print $2}'`
fi