如何保护C文件在ubuntu中进入无限循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何保护C文件在ubuntu中进入无限循环相关的知识,希望对你有一定的参考价值。

我目前正在编写一个python3脚本,通过运行带有各种输入文件的C代码来检出C源文件。汇编由海湾合作委员会完成,如果重要的话。在某些情况下,C代码进入无限循环(我想出来因为我的内存不足)。有没有一种方法可以像看门狗一样“保护”我的代码,或者告诉我X分钟后我遇到无限循环的东西?

我不能假设任何输入,所以我没有像改变它或其他东西的答案...

#runfile is an exe file, code file is .c file, inputlist/outputlist are directories

import subprocess as sbp
import os

sbp.call('gcc -o {0} {1}'.format(runfile,codefile), shell = True)
for i in range(numoFiles):
    #run the file with input i and save it to output i in outdir
    os.system("./{0} <{1} >{2}".format(ID,inputList[i],outputList[i]))
答案

查看"Halting Problem"。无法确定任意程序最终是否会完成,或者它是否会永远停留在循环中。

另一答案

我想出了一种避免通过这个method进入无限循环的方法:

import subprocess

for i in range(numofiles):
    cmd="gcc -o {0} {1}".format(runfile,codefile)
    subprocess.call(cmd, shell = True)
    try:
        cmd="./{0} <{1} >'/dev/null'".format(Cfile,inputfile) #check if runtime>100 sec
        subprocess.run(cmd,shell=True,timeout=100)
    except subprocess.TimeoutExpired:
        print("infinite loop")
        continue
    cmd="./{0} <{1} >{2}".format(Cfile,inputfile,outputfile)
    subprocess.run(cmd,shell=True) #print output to txt file

以上是关于如何保护C文件在ubuntu中进入无限循环的主要内容,如果未能解决你的问题,请参考以下文章

当 FragmentActivity 在 Android 中进入后台时出现 NotSerializableException

如何将运行无限循环的线程限制为 1 个核心?

自调整大小的集合视图在 iOS 15 中进入递归循环

在windows的cmd中进入带空格的Program Files文件夹

在windows的cmd中进入带空格的Program Files文件夹

急急!!!求救,在Delphi5中进入Excel后,如何打开指定的Excel文件