我有一个 shell 脚本,我在其中执行
iostat -c 1 > data.cpu. &
在脚本的后面,当我收集了我感兴趣的数据后,我做了一个
pkill iostat
它会杀死 iostat 并允许我继续处理 data.cpu 并生成写入标准输出的报告。报告的部分内容包括
[1]+ Terminated iostat -c 1 > data.cpu
由 pkill 产生。出于美观原因,我想防止出现“已终止”消息。我尝试了各种重定向,但到目前为止还没有成功。
有什么办法可以阻止这部分输出吗?
答案1
@卡西莫多建议我看看https://stackoverflow.com/q/81520我觉得这没有帮助。然而,该帖子中的建议之一指出https://stackoverflow.com/q/5719030/1997354
其中使用了disown
(手册页)来准确解决我的问题。即:
iostat -c 1 > data.cpu &
disown
# collect required data
pkill iostat
除了使用否认之外,还有一种方法可以抑制“终止" 不使用 disown 的消息——即使用kill而不是pkill,如下所示
iostat -c 1 > data.cpu &
iostat_pid=$(pidof)
# collect required data
kill -9 $iostat_pid
答案2
正如您链接的问题的答案中所解释的,可以通过命令控制此类消息的显示wait
。
因此,一种方法可能是iostat
在后台运行,并立即wait
使用重定向的 stderr 运行它,并在后台再次运行整个复合命令,以免等待wait
。
那是:
(iostat -c 1 > data.cpu & wait 2>/dev/null) &
之后,您就可以pkill iostat
像原来一样进行操作。
事实上,要小心地精确定位该iostat
进程,而不是 shell 的子进程是其父进程iostat
。 Apkill iostat
杀死iostat
当前正在运行的所有进程,这样就足够了。