Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优雅地退出Linux上的当前会话?_Linux_Shell - Fatal编程技术网

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

如何优雅地退出Linux上的当前会话?,linux,shell,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

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

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
是否有更好的方法来执行相同但更优雅的方式?我觉得杀死当前用户进程可能不安全。非常感谢您的建议

提前感谢。

请考虑使用
注销

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

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

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


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

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

文件:wrap1.sh

./myscript.sh 
if [ $? != 0 ];then
   exit
fi
将kill替换为退出1并退出主会话:

source wrap1.sh

正在调用<代码>退出>代码>不是某个原因的可行解决方案吗?<代码>退出>代码>将终止当前脚本,而不是整个会话。是的,退出不是退出会话。您打算使用它吗?而不是杀死9,您应该考虑使用HEMP 2。