ksh同时为多个PID命令一行到grep



我有一堆进程需要检查CPU相关性,所以我得到了一行:

for i in `ps -Fae | grep proc_name| awk '{print $2}'`; do taskset -acp $i;done

但我有一个问题,taskset也显示了所有子进程的pid,所以我得到了大量的数字以及它们的cpu相关性。

我想通过管道将上面的行导入egrep 'pid1|pid2',这样我就可以过滤掉所有的子进程。

我试着这样做:for i in `ps -Fae | grep proc_name| awk '{print $2}'`; do taskset -acp $i;done | xargs egrep 'ps -Fae | grep proc_name| awk '{print $2}''

但是我的ksh shell根本不喜欢awk括号。

所以我有两个问题:

  1. 是否可以将任务集更改为仅显示父pid
  2. 我如何写最后一段,我只写出父pid

循环内的过滤器:

for i in $(ps -Fae | grep proc_name| grep -v grep | awk '{print $2}'); do
taskset -acp "$i" | grep "$i"
done

如果它是bash,听起来您需要这个语法(请参阅https://mywiki.wooledge.org/BashFAQ/001,我不确定ksh的等效健壮读取循环语法是什么(:

while IFS= read -r i; do
taskset -acp "$i"
done < <(ps -Fae | awk '/proc_name/{print $2}') |
grep -E 'pid1|pid2'

但这是非常脆弱的,例如,如果pid1作为其他pid的子字符串出现。如果您编辑您的问题以提供简洁、可测试的样本输入(即ps -Fae的输出和taskset的相关输出(加上预期输出,那么我们可以提供更多帮助。

相关内容

  • 没有找到相关文章

最新更新