我正在使用远程系统,我使用Pycharm远程窗口来编辑和运行我的脚本。
我使用
登录ssh -Y myName@myMachine
然后我从终端运行Pycharm。
我想以这样的方式从Pycharm运行我的脚本,如果我关闭它(甚至可能从ssh会话注销),进程仍然会运行。
我试图使用“Detach without terminating process”选项退出Pycharm。这导致python进程显示在:
列表中ps -all
但是,它停止写入文件。当pycharm打开时,进程通常每隔几秒就写入一个文件。当从pycharm分离时,它显示在进程列表中(在注销并再次登录后,它显示在带有未知tty的ps -x中),但是它会停止工作,因为它不再将任何输出附加到它通常应该的文件。 / p>
可能导致什么?我该如何解决这个问题?
答案 0 :(得分:0)
有几种方法:
将终端仿真器用作tmux
和screen
:
tmux
-tmux是一种终端多路复用器,使您可以从单个屏幕创建,访问和控制多个终端。可以将tmux会话从屏幕上分离出来并在后台继续运行,然后再重新连接。类似于“屏幕”工具,您还可以使用tmux从SSH会话中分离,而无需退出远程作业。
安装tmux之后,使用以下命令启动tmux会话:
$ tmux
现在,开始您的任务或工作。然后,通过按“ CTRL-b” ,然后按“ d” ,可以安全地从tmux会话中分离,而无需退出远程作业。这将分离您的tmux会话,但会让您在后台运行该会话。这意味着即使您与会话断开连接,所有遥控器也将运行。
要列出可用的会话,请运行:
$ tmux ls
您可以使用相应的会话ID重新附加到tmux会话,如下所示:
$ tmux attach -t <会话ID>
有关更多详细信息,请参见手册页。
$ man tmux
screen
-屏幕工具是具有VT100 / ANSI终端仿真功能的全屏窗口管理器,可让您安全退出SSH会话而无需退出远程作业。对于使用多个远程服务器的人来说将很有帮助。
在远程系统上安装屏幕后,开始屏幕会话:
$屏幕
屏幕会话现在已经开始。现在,在远程系统上运行您想执行的任何作业或任务,然后按“ Ctrl-A” ,然后按“ d” ,可以退出屏幕会话,从屏幕会话分离之后,您可以从远程系统注销。远程作业将继续在服务器中运行。
要列出屏幕会话,请运行:
$屏幕-ls
您可以使用相应的会话ID重新附加到屏幕会话,如下所示:
$屏幕-r <会话ID>
有关更多详细信息,请参见手册页。
$ man屏幕
使用在后台执行的分离命令([还请参见] [6]):
nohup
-代表 No h ang up ,它是另一个命令行实用程序,即使在您运行后也可以帮助您运行Linux命令与SSH会话断开连接。
使用非常简单。登录到远程系统后,您要做的就是:
$ nohup <命令>&
现在,您可以退出SSH会话。远程作业将继续运行。
要列出正在运行的作业,请运行:
$个工作-l
有关更多详细信息,请参见手册页。
$ man nohup
disown
-取消,从系统的进程作业列表中删除该作业,因此避免了会话断开期间进程被杀死,因为注销时外壳将不会收到SIGHUP
登录到远程系统后,使用“&” 运行您的命令:
$ <命令>&
然后使用以下命令列出正在运行的作业:
$个工作-l
然后使用进程ID取消运行,如下所示:
$ disown -h
您现在可以断开与服务器的连接
有关更多详细信息,请参见手册页。
$ man nohup
setsid
-setsid将新的进程组分配给正在执行的进程,因此,创建的进程完全在新分配的进程组中,并且即使在会话注销后也可以安全地执行而不必担心被杀死
登录到远程系统后,运行:
$ setsid <命令>
有关更多详细信息,请参见手册页。
$ man nohup