想要在后台进程上抑制 pkill 的输出

想要在后台进程上抑制 pkill 的输出

我有一个 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当前正在运行的所有进程,这样就足够了。

相关内容