^
marca o início de uma linha, não um campo.
ps aux | grep ' processname'
se aproximará, mas ainda pode dar alguns falsos positivos.
Como a largura das outras colunas é fixa, você também pode usar
grep '^.\{65\}processname'
Aqui, ^.\{65\}
tem exatamente 65 caracteres desde o início da linha. O número exato pode variar no seu sistema.
Como você já está usando o awk, essa provavelmente seria a melhor opção:
ps aux | awk '{ if ($11 == "processname") print $2 }'
Você também pode reformatar a saída do ps para tornar o grepping mais fácil:
ps ax -o pid,args | grep '^[^ ]\+ processname'
O comutador -o pid,args
faz ps exibir somente o PID e o comando com argumentos. A expressão ^[^ ]\+
corresponde a todos os caracteres desde o início da linha até o primeiro espaço.