nohup和tmux的用法

最近发现有时候跑程序,跑到一半网断了,然后就与服务器链接断了。这时候程序就跑到一半停止运行了。这可怎么办呢?网上查了资料,说是nohup和tmux可以帮助解决这个问题。

网上说nohup和tmux都可以在用户断开链接、重新链接期间保持程序运行。我先测试了nohup,写了一个循环代码,每过1s输出一个数字。 

首先测试:nohup python

写了一个测试代码,每秒输出一个数字

import sys
from time import sleep

def main():
    
    print("Starting....")
    i=0;
    while True:
        
        
        print(i)
        i=i+1
        sleep(1.00)


if __name__ == "__main__":
     main()
nohup python test.py

control c , 发现nohup.out能正常输出结果

然后断开会话,重连。 

重连之后就找不到在哪里control c了。。。

htop找到相应进程然后kill,

发现nohup.out里没有输出结果。

但是,如果htop然后给进程发送sigint信号(相当于control c),就可以在nohup.out正常输出结果,相当于control C中断进程的话是可以正常写结果的,当程序正常运行结束应该也可以输出结果(但是我没有测试,我只测试了一个正常结束的进程)。

除了htop可以看进程,以下代码也能看,XXXX就是可以是test,就会输出test相关进程的PID

ps -ef | grep XXXX

因此,nohup是可以让进程 在用户断开链接再重新连接的期间保持程序运行的。 只是kill的话会阻止其写入结果。

那么,有没有办法让程序实时输出呢?

nohup python -u FileName > nohup.out 2>&1 &

参考: nohup 命令 print 不能实时输出至 nohup.out_weixin_30633405的博客-CSDN博客

这样的话cat nohup.out就可以看到实时输出了。

那tmux能否让进程在用户断开链接再重新连接的期间保持程序运行?

可以!

我在tmux的session里做了这样一个测试:

python test.py

然后就输出1,2,3,4。。。。。。。

之后我退出vscode重新进入到tmux的之前那个session

发现输出了31,32,32。。。。

中间空的时间就是退出打开之间的时间,因此,tmux也有这个功能!

如果想开始运行程序就不干了回去闭上眼睛睡大觉,第二天看结果怎么办?

tmux窗口里nohup运行程序,醒来之后直接在nohup.out里找结果,这样前天晚上工作的context也能看到。 不放心的话就用上面实时输出的代码,即使程序没运行完也能看到结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值