#!/usr/bin/python import socket, os, imp, sys p = os.getcwd() sys.path.append(p) import rpc_pb2 as rpc pid = sys.argv[1] # Connect to service socket s = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET) s.connect('/var/run/criu_service.socket') # Create criu dump request and set dump options req = rpc.criu_req() req.type = rpc.DUMP req.opts.pid = int(pid) req.opts.leave_running = False req.opts.shell_job = True req.opts.ext_unix_sk = True req.opts.log_level = 4 req.opts.log_file = 'dump.log' if not os.path.exists(str(pid)): os.makedirs(str(pid)) req.opts.images_dir_fd = os.open(str(pid), os.O_DIRECTORY) # Send request s.send(req.SerializeToString()) # Recv response resp = rpc.criu_resp() MAX_MSG_SIZE = 1024 resp.ParseFromString(s.recv(MAX_MSG_SIZE)) if resp.type != rpc.DUMP: print 'Unexpected msg type' sys.exit(-1) else: if resp.success: print 'Successfully checkpointed %s' % (str(pid)) else: print 'Fail' sys.exit(-1)