0

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

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

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

提前致谢。

4

2 回答 2

0

考虑使用logout.

(如果您不想立即终止所有正在运行的进程,包括后台作业)

您可以先发送“更柔和”的信号而不是 -9,以便让进程有时间正常关闭,然后只向不会退出的进程发送 -9。

logout仅当您能够将此脚本作为登录脚本的一部分(例如bashrc)运行时才有效,而不是在子 shell 中运行时。或者(具有相同的效果),exec script_name从登录 shell 运行脚本。

另一个想法是kill -HUP $PPID,假设脚本总是直接作为登录 shell 的子 shell 运行。这将向父 shell(登录 shell)发出结束会话的信号。

于 2013-09-30T20:34:50.720 回答
0

例如,您可以编写一个包装脚本,然后输入

文件:wrap1.sh

./myscript.sh 
if [ $? != 0 ];then
   exit
fi

用 exit 1 和主会话替换 kill :

source wrap1.sh
于 2013-09-30T22:40:09.147 回答