我正在用C做一个项目,因为我需要处理大量数据。有没有办法在30分钟后自动停止程序,然后在我再次运行程序时恢复?
答案 0 :(得分:4)
没有自动方法来执行此操作。如果您使用的是Unix系统,则可以在程序运行时按 Ctrl + Z 向其发送STOP信号。它将一直等到你再次发送一个CONT信号(最简单的方法是使用fg
shell命令)。已停止的进程仍驻留在内存中,但未运行。
有更复杂的方法来获取正在运行的程序的“快照”并将其保存到磁盘。稍后,您可以加载快照并继续执行该程序。例如,请参阅CryoPID。
答案 1 :(得分:2)
你可以自动化它。如前所述,Crtl-Z和fg只不过是信号。在Unix中,您可以使用kill命令发送它们。所以kill -19 $ PID将停止你的进程(当$ PID是它的PID时)并且kill -18将继续它。
您只需编写一个包装脚本,如下所示:
#!/bin/sh
PIDFILE=wherever/myprogram.pid
if [ -e $PIDFILE ]; then
kill -18 `cat $PIDFILE`
else
myprogram &
echo $! > $PIDFILE
fi
sleep 30
kill -19 `cat $PIDFILE`
(非常简短,未经测试,你必须注意在你杀死进程时删除pid文件)。第一次运行它,它将开始执行(30秒),稍后它将只撤销你的程序。你可以改进它,例如通过检查进程列表中是否有程序进程,如果没有删除pid文件,以防它已经存在。因此,重启或终止流程后,它甚至会表现正确。
答案 2 :(得分:1)
简短的回答:没有付出一些努力让你的程序'自己休眠',没有。
如果您在UNIX上运行,那么我确信您可以设置一个cron作业,以便在需要时暂停/恢复该程序。在Windows下,你将无法获得这样的奢侈。