将一个或多个 PID 从 pgrep 传输到 top 的 -p 参数

将一个或多个 PID 从 pgrep 传输到 top 的 -p 参数

我看到了这个好问题:

将上一个命令的输出作为参数传递给下一个命令

并试图从中得到我想要的东西,但没有成功。

我经常想观察我的 maxima/lisp 进程,而不是运行 top/htop/etc 我想我可以只搜索“maxima.core”并使用从该搜索返回的 pid 作为 top 的“-p”标志的输入。如果它返回不止一个,那就没什么大不了的了。

1.) 如果我知道 PID,我可以使用这个:

top -p 10815 -o S -d 0

2.) 为了获取 PID,我这样做:

ps -fu <user> | pgrep -f maxima.core

它输出一个列表,例如

10814
11989

尝试连接它们对我来说失败了。我的尝试主要围绕这一点:

<user>@<user> ~ $ top -o S -d 0 -p $(ps -fu <user> | pgrep -f maxima.core)

还尝试合并此结果:如何获取从两个或更一般的“n”开始的位置参数?

top -o S -d 0 -p "${(ps -fu <user> | pgrep -f maxima.core)[@]}"

但它抱怨替代性较差。

我非常依赖 bash。

答案1

如果您的版本pgrep支持-d( --delimiter) 选项,您应该能够使用它来提供以逗号分隔的 PID 列表top

top -o S -d 0 -p "$(pgrep -d, -u <user> -f maxima.core)"

相关内容