V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
algas
V2EX  ›  Linux

[ Linux]能否保存正在运行的进程到文件,重启后再继续运行

  •  1
     
  •   algas · 2015-10-19 23:59:10 +08:00 · 3442 次点击
    这是一个创建于 3323 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道加一些限定条件会不会让这个事情变得容易:
    首先程序是用 C 写的,而且只用到了 C 的标准库。
    其次没有多线程和进程间通信。

    其实就是想应付一下偶然的停电,毕竟把程序里所有变量输出再读入的方法太闹心了
    14 条回复    2015-11-02 06:18:49 +08:00
    Orzzzz
        1
    Orzzzz  
       2015-10-20 00:04:51 +08:00
    你说的是休眠吗?
    zhicheng
        2
    zhicheng  
       2015-10-20 00:07:16 +08:00
    UPS
    algas
        3
    algas  
    OP
       2015-10-20 00:27:15 +08:00
    @Orzzzz
    对,非常类似,只是我只需要保存我的计算程序
    algas
        4
    algas  
    OP
       2015-10-20 00:34:03 +08:00
    @zhicheng 死机,机房空调挂了,被管理员杀了,别人的程序内存溢出了,着急算别的高优先任务等情况也在考虑范围内
    little_cup
        5
    little_cup  
       2015-10-20 00:45:00 +08:00
    简单粗暴的办法应该是虚拟机快照吧。
    zhicheng
        6
    zhicheng  
       2015-10-20 00:56:46 +08:00
    @algas Good Luck
    skydiver
        7
    skydiver  
       2015-10-20 00:57:03 +08:00 via Android
    docker
    mikale
        8
    mikale  
       2015-10-20 01:11:50 +08:00
    设计一个数据结构,然后开一个线程,时不时 flush 到硬盘上,启动程序的时候,从这个硬盘读取文件到内存。这是最简单的数据库运用的机制。
    owwlo
        9
    owwlo  
       2015-10-20 01:54:56 +08:00
    chinvo
        10
    chinvo  
       2015-10-20 08:18:52 +08:00
    docker 或者其他虚拟化技术
    algas
        11
    algas  
    OP
       2015-10-22 21:57:41 +08:00
    @skydiver
    @chinvo

    @mikale
    @owwlo

    投奔了 docker
    algas
        12
    algas  
    OP
       2015-10-26 15:04:31 +08:00
    @skydiver
    @chinvo

    貌似 docker 不行的样子,我在容器中运行程序,但是在 stop 容器后,里面的程序并不是被暂停,而是被杀掉了,是不是我的姿势有问题?
    onlyxuyang
        13
    onlyxuyang  
       2015-10-29 23:53:19 +08:00
    能想到的只有虚拟机快照... -_-...
    Arthur2e5
        14
    Arthur2e5  
       2015-11-02 06:18:49 +08:00
    https://stackoverflow.com/questions/192838/can-you-freeze-a-c-c-process-and-continue-it-on-a-different-host 有讨论。其中提到了一点,也就是 core 的信息常常是不够的。不过看你这么说,感觉还是可以 `./heavy_computation & gcore -o core $!` 试试,到时候 `gdb` 挂上再看看能不能 `continue` 吧。

    前面提到的 CRIU 看网页好像是个好主意。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2845 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:28 · PVG 20:28 · LAX 04:28 · JFK 07:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.