我有一种情况,我提交的作业已经运行了五天,但由于引入了一个错误,所有的工作都可能丢失。我做了一个“系统”调用来压缩数据文件,然后删除可能大到4G的原始未压缩文件。所以我在C代码中有这个
strcpy(command,"data"); ////I should added a forward slash here "data/"
sprintf(command,"%scompress -c -i %s -o %s",command,name,out_name);
system(command);
remove(name); /////This is the problem
错误出现在sprintf行中,我想要做的是在数据/压缩中调用程序,但由于缺少'/',系统命令失败。因此产生的数据不会被压缩,然后立即将原始文件删除,让我什么都没有!如果它被压缩就可以了。
目前在这种状态下有五个正在运行的工作。我需要以某种方式转移这种行为,这样我就不会失去五天的工作。我想在当前目录中创建一个名为'datacompress'的假脚本来改变正在运行的程序的行为。我可以这样做,还是有更好的选择,如果有的话?
答案 0 :(得分:2)
您可以将datacompress
设为data/compress
的符号链接。糟糕,除非流程的$PATH
包含.
,否则无法使用。
另一个选项:删除用户对包含name
的目录的写入权限。这将导致remove()
函数失败。
如果您的系统具有访问控制列表,请删除该进程对未压缩文件的删除权限。
当您尝试提供解决方案时,可以使用以下命令暂停该过程:
kill -STOP <pid>
答案 1 :(得分:1)
为数据文件创建硬链接(不符号链接):
ln datafile datafile.bkp
当程序删除原始数据文件时,文件的内容将保留在.bkp文件名下。
然后修复程序以检查重要事项的错误状态,例如compress命令。