如何从Pycharm分离运行python脚本以便它继续附加到文件?

时间:2014-04-15 20:32:48

标签: python ssh process pycharm nohup

我正在使用远程系统,我使用Pycharm远程窗口来编辑和运行我的脚本。

我使用

登录
ssh -Y myName@myMachine

然后我从终端运行Pycharm。

我想以这样的方式从Pycharm运行我的脚本,如果我关闭它(甚至可能从ssh会话注销),进程仍然会运行。

我试图使用“Detach without terminating process”选项退出Pycharm。这导致python进程显示在:

列表中
ps -all
但是,它停止写入文件。当pycharm打开时,进程通常每隔几秒就写入一个文件。当从pycharm分离时,它显示在进程列表中(在注销并再次登录后,它显示在带有未知tty的ps -x中),但是它会停止工作,因为它不再将任何输出附加到它通常应该的文件。 / p>

可能导致什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

有几种方法:

  1. 将终端仿真器用作tmuxscreen

    1. tmux-tmux是一种终端多路复用器,使您可以从单个屏幕创建,访问和控制多个终端。可以将tmux会话从屏幕上分离出来并在后台继续运行,然后再重新连接。类似于“屏幕”工具,您还可以使用tmux从SSH会话中分离,而无需退出远程作业。

      安装tmux之后,使用以下命令启动tmux会话:

        

      $ tmux

      现在,开始您的任务或工作。然后,通过按“ CTRL-b” ,然后按“ d” ,可以安全地从tmux会话中分离,而无需退出远程作业。这将分离您的tmux会话,但会让您在后台运行该会话。这意味着即使您与会话断开连接,所有遥控器也将运行。

      要列出可用的会话,请运行:

        

      $ tmux ls

      您可以使用相应的会话ID重新附加到tmux会话,如下所示:

        

      $ tmux attach -t <会话ID>

      有关更多详细信息,请参见手册页。

        

      $ man tmux

    2. screen-屏幕工具是具有VT100 / ANSI终端仿真功能的全屏窗口管理器,可让您安全退出SSH会话而无需退出远程作业。对于使用多个远程服务器的人来说将很有帮助。

      在远程系统上安装屏幕后,开始屏幕会话:

        

      $屏幕

      屏幕会话现在已经开始。现在,在远程系统上运行您想执行的任何作业或任务,然后按“ Ctrl-A” ,然后按“ d” ,可以退出屏幕会话,从屏幕会话分离之后,您可以从远程系统注销。远程作业将继续在服务器中运行。

      要列出屏幕会话,请运行:

        

      $屏幕-ls

      您可以使用相应的会话ID重新附加到屏幕会话,如下所示:

        

      $屏幕-r <会话ID>

      有关更多详细信息,请参见手册页。

        

      $ man屏幕

  2. 使用在后台执行的分离命令([还请参见] [6]):

    1. nohup-代表 No h ang up ,它是另一个命令行实用程序,即使在您运行后也可以帮助您运行Linux命令与SSH会话断开连接。

      使用非常简单。登录到远程系统后,您要做的就是:

        

      $ nohup <命令>&

      现在,您可以退出SSH会话。远程作业将继续运行。

      要列出正在运行的作业,请运行:

        

      $个工作-l

      有关更多详细信息,请参见手册页。

        

      $ man nohup

    2. disown-取消,从系统的进程作业列表中删除该作业,因此避免了会话断开期间进程被杀死,因为注销时外壳将不会收到SIGHUP

      登录到远程系统后,使用“&” 运行您的命令:

        

      $ <命令>&

      然后使用以下命令列出正在运行的作业:

        

      $个工作-l

      然后使用进程ID取消运行,如下所示:

        

      $ disown -h

      您现在可以断开与服务器的连接

      有关更多详细信息,请参见手册页。

        

      $ man nohup

    3. setsid-setsid将新的进程组分配给正在执行的进程,因此,创建的进程完全在新分配的进程组中,并且即使在会话注销后也可以安全地执行而不必担心被杀死

      登录到远程系统后,运行:

        

      $ setsid <命令>

      有关更多详细信息,请参见手册页。

        

      $ man nohup