[转载][整理]解决SSH退出登陆后保持进程继续在后台运行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转载][整理]解决SSH退出登陆后保持进程继续在后台运行相关的知识,希望对你有一定的参考价值。
参考技术Azjking的几个思考写的很好啊忍不住想记下来,侵删
远程ssh用tar打包一个文件夹或者unrar解压一个大文件,即使加了&,退出ssh登录时解压进程中断。
ps:直接exit的话会提示 zsh: you have running jobs. ,强行退出会有 zsh: warning: 1 jobs SIGHUPed 提示。
直接转一段wiki
If the process receiving SIGHUP is a Unix shell, then as part of job control it will often intercept the signal and ensure that all stopped processes are continued before sending the signal to child processes (more precisely, process groups, represented internally by the shell as a "job"), which by default terminates them.
This can be circumvented in two ways. Firstly, the Single UNIX Specification describes a shell utility called nohup , which can be used as a wrapper to start a program and make it ignore SIGHUP by default . Secondly, child process groups can be " disowned " by invoking disown with the job id, which removes the process group from the shell\'s job table (so they will not be sent SIGHUP) , or (optionally) keeps them in the job table but prevents them from receiving SIGHUP on shell termination.
目前有以下几种解决方案:
用途:不挂断地运行命令。
语法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
退出状态:该命令返回下列出口值:
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。
该命令的一般形式为: nohup command &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:(也就是说自定义输出的文件名)
nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
结合重定向知识:
为了不让一些执行信息输出到前台(控制台),我们还会加上刚才提到的>/dev/null 2>&1命令来丢弃所有的输出:
以上是关于[转载][整理]解决SSH退出登陆后保持进程继续在后台运行的主要内容,如果未能解决你的问题,请参考以下文章
退出Docker后保持继续运行的解决办法 docker结束但不退出 docker退出后继续运行系统