Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 杀死Bash复制子进程以模拟崩溃_Unit Testing_Bash_Kill - Fatal编程技术网

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

Unit testing 杀死Bash复制子进程以模拟崩溃,unit-testing,bash,kill,Unit Testing,Bash,Kill,我正在尝试测试一个Bash脚本,它分别复制文件并对每个文件执行一些操作。它应该是可恢复的,所以我想确保对它进行适当的测试。什么是终止或以其他方式中止从测试脚本进行复制的脚本的优雅解决方案,以确保它没有时间复制和处理所有文件 我有子进程的PID,我可以更改这两个脚本的源代码,我可以创建任意大的文件进行测试 澄清:我在后台用&启动脚本,将PID设置为$,然后我有一个循环,检查目标目录中是否至少有一个文件(测试脚本复制三个文件)。此时,我运行了kill-9$PID,但过程没有中断,文件复制成功。即使文

我正在尝试测试一个Bash脚本,它分别复制文件并对每个文件执行一些操作。它应该是可恢复的,所以我想确保对它进行适当的测试。什么是终止或以其他方式中止从测试脚本进行复制的脚本的优雅解决方案,以确保它没有时间复制和处理所有文件

我有子进程的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