退出 ssh 并且命令仍在运行?

退出 ssh 并且命令仍在运行?

我正在服务器上运行命令。它带有这个库http://www.graphicsmagick.org/

基本上我有一个 for 循环,可以对很多文件进行图像处理。

命令运行了几个小时,并且将运行几个小时。我想知道,我可以退出 ssh 并仍然在远程机器上运行这些命令吗?退出 ssh 是否会发送一些信号来结束当前命令的执行?

我注意到的另一件事......虽然我正在远程运行命令,但我的笔记本电脑过热。活动监视器显示 bash 正在使用 70% 的 cpu。我用的是 MacBook Pro

现在这很奇怪。远程命令如何对本地计算机造成压力?

答案1

一种解决方案是在命令前面加上nohup.这告诉计算机忽略“挂断”信号(例如退出 ssh 会话)。这可能不适用于for循环。

另一个好的解决方案(也是我个人最喜欢的方法)是安装“screen”包。screen提供一个虚拟终端,可以通过按 断开连接,使进程保持运行CTRL + A , D。稍后可以使用 重新连接屏幕screen -r

答案2

当具有关联控制终端(在您的情况下)的会话领导者bash退出时,操作系统会向前台进程组(前台作业)中的所有进程发送 SIGHUP。此外,bash默认情况下,将 SIGHUP 发送到其所有正在运行或已停止的作业(已停止的作业也会发送 SIGCONT)。现在,收到 SIGHUP 后的默认操作是进程终止。

有几种方法可以让进程在bash退出后继续运行。首先,你可以让你的进程免受 SIGHUP 的影响;这就是该nohup命令的作用。其次,可以将相应的进程组后台化,并指示bash不要向其发送SIGHUP;这就是disownshell 内置函数的用途(另请注意,有一个huponexitshell 选项,当交互式登录 shell 退出时,该选项会导致将 SIGHUP 发送到所有作业)。

如果您希望在再次登录后将终端重新连接到进程组,您可能需要使用具有此功能的包装器;终端多路复用器等screen具有此功能。

相关内容