La forma correcta es "WNOHANG | WUNTRACED". Te explico brevemente cada caso:
Caso 1 (incorrecto):
pidh = waitpid(ptr->pid, &status, WNOHANG || WUNTRACED)
En este caso, el codigo evalua la operacion (WNOHANG || WUNTRACED), la cual devuelve 1 si alguno de dichos valores es distinto de cero (que ambos lo son) o devuelve 0 si ambos valoes son cero. Es decir, que el tercer argumento que le pasas a waitpid va a ser 1 o 0 (en este caso 1). Y 1 quizas equivale, casulamente, al valor de otra flag distinta, o a nada.
Caso 2 (correcto):
pidh = waitpid(ptr->pid, &status, WNOHANG | WUNTRACED)
En este otro caso, el codigo realiza una operacion binaria OR con ambos valores, y el resultado de dicha operacion (que sera un valor numerico formado por la combinacion de los bits 1 de ambas constantes) sera pasado como tercer argumento de waitpid.