Unit testing 杀死Bash复制子进程以模拟崩溃
我正在尝试测试一个Bash脚本,它分别复制文件并对每个文件执行一些操作。它应该是可恢复的,所以我想确保对它进行适当的测试。什么是终止或以其他方式中止从测试脚本进行复制的脚本的优雅解决方案,以确保它没有时间复制和处理所有文件 我有子进程的PID,我可以更改这两个脚本的源代码,我可以创建任意大的文件进行测试 澄清:我在后台用Unit testing 杀死Bash复制子进程以模拟崩溃,unit-testing,bash,kill,Unit Testing,Bash,Kill,我正在尝试测试一个Bash脚本,它分别复制文件并对每个文件执行一些操作。它应该是可恢复的,所以我想确保对它进行适当的测试。什么是终止或以其他方式中止从测试脚本进行复制的脚本的优雅解决方案,以确保它没有时间复制和处理所有文件 我有子进程的PID,我可以更改这两个脚本的源代码,我可以创建任意大的文件进行测试 澄清:我在后台用&启动脚本,将PID设置为$,然后我有一个循环,检查目标目录中是否至少有一个文件(测试脚本复制三个文件)。此时,我运行了kill-9$PID,但过程没有中断,文件复制成功。即使文
&
启动脚本,将PID设置为$代码>,然后我有一个循环,检查目标目录中是否至少有一个文件(测试脚本复制三个文件)。此时,我运行了kill-9$PID
,但过程没有中断,文件复制成功。即使文件足够大,创建它们(使用dd
和/dev/uradom
)需要几秒钟,也会发生这种情况
是否只有当cp
完成时,shell才能看到这些文件?这可能有点奇怪,但它可以解释为什么kill
命令太迟了
此外,我们的想法不是测试是否恢复同一进程,而是切断第一个进程(模拟系统崩溃)并通过另一次调用来恢复。向子进程发送信号:
kill -KILL $childpid
您可以尝试使用大文件和睡眠来玩计时游戏。您可能对测试的重复性有问题
您可以在测试脚本中添加限制代码,然后将其完全限制。您可以通过传入以下值来执行限制代码:
- 循环中
sleep
ing的睡眠值
- 要处理的文件数
- 脚本将终止的秒数
- 用于执行脚本的
nice
值
从测试的角度来看,其中一些可能更好或更差nice
'ing可能会得到不同的结果,设置后台进程以在N秒后终止脚本也是如此。您也可以同时尝试其中的多个,这可能会给您想要的控制。例如,接受休眠值和杀死秒可以给你细粒度的节流控制。你能不能杀死shell进程?不知道,看看FR ED Read HAMIDIAL的评论,考虑交替<代码>停止> /COD>和<代码> -CONT/CODE >来模拟一个进程,该进程停滞,然后再次启动。抱歉,不起作用。我尝试过kill
、kill-9
和kill-kill
,但无论文件有多大,它都不会切断进程中的cp
。