Answers:
^ 标记线的开始,而不是字段。
ps aux | grep ' processname'
会更接近,但它仍然可能会产生一些误报。
由于其他列的宽度是固定的,您也可以使用
grep '^.\{65\}processname'
在这里,^.\{65\}从行首开始就是65个字符。确切的数字可能因系统而异。
由于你已经在使用awk,这可能是一个更好的选择:
ps aux | awk '{ if ($11 == "processname") print $2 }'
您还可以重新格式化ps的输出以使grepping更容易:
ps ax -o pid,args | grep '^[^ ]\+ processname'
该开关-o pid,args使ps仅显示PID和带参数的命令。表达式^[^ ]\+匹配从行的开头到第一个空格的所有字符。
cmd显示裸命令,例如,仅显示processname没有参数。
cmd和comm。后者显示裸命令。cmd并且args是别名。
$2表示第二个字段。