Выполнил команду через ssh, отключился от сервера - команда завершилась. Как сделать такое?
Как я могу находясь в ssh убить все процессы, созданные конкретным подключением? Допустим у меня 3 подключения и в одном я хочу убить все процессы, а в других не трогать ничего
Все изгуглил, думал как то по простому можно сделать, приглось писать такой скрипт, который убивает все процессы порожденные ssh сессией. Смысл такой: ищется первый родительский процесс под названием ssh - получаю его PID, далее получаю все его дочерние PIDы - и их убиваю. Как вам такой подход? Пойдет или все таки можно более лаконично сделать. Смотрел pgrep - там можно убить по определенному tty, но он в моем случае не создается. Как иначе идентифицировать процессы принадлежащие конкретной ssh сессии по не понять
#!/bin/bash
function getppid() {
echo `ps -o ppid= -p $1;`
}
ppid=$$
userself=`whoami`
my_sshd=""
while [ "$ppid" != "" ] && [ "$ppid" != "0" ]
do
ppid=`ps -o ppid= -p $ppid;`
if [ $ppid == "0" ]; then
break
fi
info=`ps -o comm= -o user= -p $ppid;`
comm=`echo $info | cut -d" " -f1`
user=`echo $info | cut -d" " -f2`
if [ $userself == $user ] && [ $comm == "sshd" ] ; then
echo "my ssh: $info"
my_sshd=$ppid;
break;
fi
done
if [ "$my_sshd" != "" ]; then
pstree -p $my_sshd
kill_pids=`pstree -pc $my_sshd | grep -iEo '([0-9]+)' | paste -sd " " -`
kill_pids="${kill_pids/$$/""}"
kill_pids="${kill_pids/$my_sshd/""}"
#kill_pids=`pgrep -d " " --parent $my_sshd`
if [ "$kill_pids" != "" ]; then
echo "killing pids...$kill_pids"
kill $kill_pids 2>/dev/null
else
echo "nothing kill..."
fi
sleep 0.1
else
echo "my ssh session not found"
exit 1
fi