ksh cmd 一次 grep 多个 PID 的一行

ksh cmd one-liner to grep for several PIDs at once

我有一堆进程需要检查 CPU 亲和力,所以我得到了这个衬垫:

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

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

我想将上面的行通过管道传输到一个 egrep 'pid1|pid2' 中,这样我就可以过滤掉所有的子进程。

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

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

所以我有两个问题:

  1. 能否将任务集更改为仅显示父 pid?
  2. 我如何写最后一点我只 egrep 父 pid?

如果它是 bash,听起来你好像在问这个语法(参见 https://mywiki.wooledge.org/BashFAQ/001,我不确定 ksh 的等效稳健读取循环语法是什么):

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

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

循环内过滤:

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