我有一堆进程需要检查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括号。
所以我有两个问题:
- 是否可以将任务集更改为仅显示父pid
- 我如何写最后一段,我只写出父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
的相关输出(加上预期输出,那么我们可以提供更多帮助。