Mělo by to fungovat:
nohup ./myprogram.sh > /dev/null 2>&1 &
echo $! > run.pid
Po přesměrování již máte jeden ampersand, který umístí váš skript na pozadí. Proto stačí zadat požadovaný příkaz pouze po tomto ampersandu, před kterým není nic jiného:
nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid