杀死Bash复制子进程以模拟崩溃

时间:2010-11-05 16:09:51

标签: unit-testing bash kill

我正在尝试测试一个单独复制文件的Bash脚本,并为每个文件做一些事情。它是可以恢复的,所以我想确保正确测试。杀死或以其他方式中止从测试脚本进行复制的脚本的优雅解决方案是什么,确保它没有时间复制和处理所有文件?

我有子进程的PID,我可以更改两个脚本的源代码,我可以创建任意大的文件进行测试。

澄清:我在后台用&启动脚本,得到PID为$!,然后我有一个循环,检查目标目录中是否至少有一个文件(测试脚本复制三个文件)。此时我运行kill -9 $PID,但进程未中断 - 文件已成功复制。即使文件足够大以至于创建它们(dd/dev/urandom)需要几秒钟,也会发生这种情况。

文件只有在cp完成后才能看到shell?这有点奇怪,但它可以解释为什么kill命令为时已晚。

此外,我们的想法不是测试恢复相同的进程,而是切断第一个进程(模拟系统崩溃)并使用另一个调用重新开始。

2 个答案:

答案 0 :(得分:2)

向子进程发送KILL信号:

kill -KILL $childpid

答案 1 :(得分:0)

您可以尝试使用大文件和睡眠来玩定时游戏。您可能在测试的可重复性方面存在问题。

您可以在测试脚本中添加限制代码,然后将其一直限制下来。您可以通过传入以下值来限制代码:

  • 循环中sleep的睡眠值
  • 要处理的文件数
  • 脚本将死亡的秒数
  • nice值,用于执行
  • 中的脚本

从测试的角度来看,其中一些可能会更好或更差。 nice可能会让您获得可变结果,并且设置后台进程以在N秒后终止您的脚本。您也可以同时尝试多个这样的游戏,这可能会为您提供所需的控制权。例如,同时接受睡眠值和kill秒可以为您提供细粒度的限制控制。