一般情况下,我们用xshell等连接工具操作linux系统时,有些操作的生命周期是本次会话,比如说python的web服务,如果你一旦断开,再次重连你会发现它就结束了。
这种情况发生的原因是你远程工具连接的这次会话,对于linux来说,它也是一个进程,拥有一个进程号。
当你结束本次会话,linux在回收资源的时候就视为从会话进程开始往下的所有子进程都结束了。
所以你想要结束远程连接,任务还不结束,那就有两种思路,第一种是把操作的进程交给会话的父进程,第二种就是使用插件使得你的会话结束,但是服务任然在运行。
第一种交给父进程
这种方式使用很简单,适用于针对某个服务或者是某个单独的进程操作,就是在命令的前面加上nohup
就可以把它交给父进程
比如--------
nohup python -m SimpleHTTPServer 10040 & >> /opt/start_cdh_log/cdh_start.log
这种方式linux系统自带的,随后想要结束进程时,如果没有服务自己的stop命令,就只能kill
[root@hdp2 ~]# nohup --help
用法:nohup 命令 [参数]...
或:nohup 选项
忽略挂起信号运行指定的命令。
--help 显示此帮助信息并退出
--version 显示版本信息并退出
If standard input is a terminal, redirect it from /dev/null.
If standard output is a terminal, append output to 'nohup.out' if possible,
'$HOME/nohup.out' otherwise.
If standard error is a terminal, redirect it to standard output.
To save output to FILE, use 'nohup COMMAND > FILE'.
注意:您的shell 内含自己的nohup 程序版本,它会覆盖这里所提及的相应
版本。请查阅您的shell 文档获知它所支持的选项。
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告nohup 的翻译错误
要获取完整文档,请运行:info coreutils 'nohup invocation'
第二种用插件
有个插件工具叫tmux
,它可以为你以服务的形式持久的运行一个会话。
yum install -y tmux
随后在你操作的时候使用命令tmux new -s session_name
新开一个会话服务
tmux new -s testse
在会话里你就可以操作了,如果要回到原先的系统会话,先按下ctrl+b
,然后再单独按d
出现上面这个界面,你就回到原本的系统远程会话了,不过此时tmux会话里的进程仍然在运行。
你想重新回到tmux会话里就运行tmux a -t session_name
在会话间切换的命令: 先按ctrl+b
,再按s
,然后就可以在会话间选择其中一个,按enter进入。
列出会话tmux ls
即使关闭远程,会话也仍然存在,如果里面有进程,会持续运行。除非进入会话中把进程关闭掉。
关闭会话的方法:tmux kill-session -t session_name