如何优雅地退出Linux上的当前会话?

时间:2013-09-30 20:33:26

标签: linux shell

我需要退出当前会话并使用以下代码:

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

是否有更好的方法来执行相同但更优雅的方式?我觉得杀死当前用户进程可能不安全。任何建议都非常感谢。

提前致谢。

2 个答案:

答案 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