$ pgrep -x ./hello_world $ echo $? 1
O motivo pelo qual a primeira expressão não corresponde é porque você está pedindo para o pgrep procurar uma correspondência de nome de processo exata (com o nome do processo sendo hello_world em seu exemplo), mas você fornece ./hello_world como cadeia de pesquisa.
$ pgrep -x hello_world $ echo $? 1
Por que a segunda pesquisa não funciona para você, não tenho ideia. Ele funciona no Ubuntu 14.04, então ou há algum tipo de erro no seu post, ou há um bug na versão mais recente:
$ ./dd &
[1] 6377
$ pgrep -x dd
6377