1

我正在调试一个 shell 脚本,所以我在开头添加了 set -x 代码片段如下

tcpdump -i $interface host $ip_addr and 'port 80' -w flash/flash.pcap &
sudo -u esolve firefox /tor_capture/flash.html &
sleep $capture_time

但我注意到执行顺序如下

++ sleep 5
++ sudo -u esolve firefox /tor_capture/flash.html
++ tcpdump -i eth0 host 138.96.192.56 and 'port 80' -w flash/flash.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

所以执行顺序与脚本中的命令顺序相反这是什么问题以及如何处理?谢谢!

4

2 回答 2

1

由于这些行是后台运行的,我认为输出来自set -x为运行程序而生成的子shell,并且主shellsleep在子shell继续生成输出之前获取命令。这可以解释为什么该sleep命令首先出现。至于另外两个,我想你可能偶尔也会以另一个顺序得到它们,因为两者之间没有同步 - 取决于你有多少 CPU,系统有多忙等等,时间子壳之间是伪非确定性的......

于 2012-10-31T18:29:28.080 回答
0

您需要前 2 行作为后台进程运行吗?

如果没有,请&在最后删除并重试。

于 2012-10-31T18:20:57.187 回答