当前位置: 技术问答>linux和unix
【求助】system()命令执行失败,请高手帮忙解决,谢谢!
来源: 互联网 发布时间:2016-07-04
本文导语: 在suse 11 Linux系统中,编译的C语言代码。功能是按时间创建文件夹,并且保存大量的文件到文件夹,到每天凌晨删除过期的文件夹(含大量文件)。 其中,使用 system("rm -rf 文件夹路径");删除指定文件夹。 每次开...
在suse 11 Linux系统中,编译的C语言代码。功能是按时间创建文件夹,并且保存大量的文件到文件夹,到每天凌晨删除过期的文件夹(含大量文件)。
其中,使用 system("rm -rf 文件夹路径");删除指定文件夹。
每次开始运行时可以正常工作,但是程序运行3天后,system命令无法删除相关文件夹,一旦出现这个bug,除非重启进程,否则之后均无法正常删除文件夹。
使用"pstree"命令,发现当前进程下并没有子进程在运行。
手动键入"rm"命令,可以删除相关文件夹。
磁盘,内存都还有剩余空间。
请高手帮忙看看,可能那些地方出了问题,非常感谢!
其中,使用 system("rm -rf 文件夹路径");删除指定文件夹。
每次开始运行时可以正常工作,但是程序运行3天后,system命令无法删除相关文件夹,一旦出现这个bug,除非重启进程,否则之后均无法正常删除文件夹。
使用"pstree"命令,发现当前进程下并没有子进程在运行。
手动键入"rm"命令,可以删除相关文件夹。
磁盘,内存都还有剩余空间。
请高手帮忙看看,可能那些地方出了问题,非常感谢!
|
1 system("rm -rf 文件夹路径"),这种方式有个缺点就是不太好调试,虽然用起来方便。
2 system是fork一个进程然后去执行。我猜想可能是没有真正fork成功,而并不是cmd写的不对。如何验证?
请改用system("./rm.sh"),在rm.sh中加入调试信息,看看到底在system()的时候,有无fork成功,此时的env等信息是什么。
3 再高级一些的方式是GDB,上面你已经提到用GDB来跟踪system()所在的程序了,那么我们是否可以跟踪进system()看看到底发生什么事情?在什么地方没有执行成功?这个方式是可行的,只是要求你对GDB,汇编、Linux程序、以至kernel都有较为深厚的认识。考虑libc-debug。
在Linux这个开源世界的最为美丽的地方就是,你掌握着所有的程序,而不是看着他们运行。
4 还有一个方法:遇到这类问题,考虑调用libc中的remove(),自己写代码实现删除功能。
2 system是fork一个进程然后去执行。我猜想可能是没有真正fork成功,而并不是cmd写的不对。如何验证?
请改用system("./rm.sh"),在rm.sh中加入调试信息,看看到底在system()的时候,有无fork成功,此时的env等信息是什么。
3 再高级一些的方式是GDB,上面你已经提到用GDB来跟踪system()所在的程序了,那么我们是否可以跟踪进system()看看到底发生什么事情?在什么地方没有执行成功?这个方式是可行的,只是要求你对GDB,汇编、Linux程序、以至kernel都有较为深厚的认识。考虑libc-debug。
在Linux这个开源世界的最为美丽的地方就是,你掌握着所有的程序,而不是看着他们运行。
4 还有一个方法:遇到这类问题,考虑调用libc中的remove(),自己写代码实现删除功能。