有没有办法阻止后台进程的输出出现在另一个进程的输出中间?
我有一个脚本status_update.sh
,它定期查询单独主机上的某些状态,并在发生变化时打印更新行。
我想为多个主机并行运行此脚本:
#!/bin/bash
status_update.sh -h host1 &
status_update.sh -h host2 &
status_update.sh -h host3 &
status_update.sh -h host4 &
echo "hit any key to quit"
read -n 1 CHAR
killall status_update.sh
我遇到的问题是一个进程的更新显示在另一进程的输出中间。有没有办法让输出在不同的行上分开?
最佳答案
一般来说,确保写入不重叠的唯一方法是使用某种互斥体。在 shell 中实现这一点很痛苦,而且可能不应该这样做。相反,编写 status_update.sh 以阻止互斥体并将名称作为参数传递,然后让 status_update.sh 阻止任何写入,直到获得互斥体。在不使用互斥体的情况下潜在缓解该问题的一种方法是将所有内容通过管道传输到 cat,这有助于确保进行更少的写入系统调用(如果进行 20 次大小为 5 的写入而不是 1 次大小为 100 的写入,则有更多机会用于交错写入)。也就是说,尝试:
#!/bin/bash
status_update.sh -h host1 | cat &
status_update.sh -h host2 | cat &
status_update.sh -h host3 | cat &
status_update.sh -h host4 | cat &
关于bash - 并行输出到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136588/