我需要退出当前会话并使用以下代码:
read -p "Do you want to start a new session? [Y/N] " usr_session
if [ "$usr_session" == "y" ] || [ "$usr_session" == "Y" ]; then
echo -e "`date`\t\t Exiting...\n You will need to login back...\n" >> $LOG_FILE
echo -e "Exiting...\n You will need to login back...\n"
sleep 5
curr_usr=`whoami`
pkill -9 -u $curr_usr
elif [ "$usr_session" == "n" ] || [ "usr_session" == "N" ]; then
echo -e "You are still in the same session.\n"
else
echo "Invalid input"
fi
是否有更好的方法来执行相同但更优雅的方式?我觉得杀死当前用户进程可能不安全。任何建议都非常感谢。
提前致谢。
答案 0 :(得分:0)
考虑使用 logout
。
(如果您不想立即终止所有正在运行的进程,包括后台作业)
您可以先发送“较软”信号而不是-9,以便为进程提供时间优雅地关闭,然后只发送-9到不会退出的进程。
仅当您能够将此脚本作为登录脚本的一部分(例如logout
)运行时, bashrc
才会起作用,而不是在子shell中运行。或者(具有相同的效果),从登录shell运行带有exec script_name
的脚本。
另一个想法是kill -HUP $PPID
,假设脚本总是直接作为登录shell的子shell运行。这将通知父shell(登录shell)结束会话。
答案 1 :(得分:0)
你可以写一个包装脚本,然后输入,例如
file:wrap1.sh
./myscript.sh
if [ $? != 0 ];then
exit
fi
使用退出1和主会话替换kill:
source wrap1.sh