Isso funcionou para mim, remova o semáforo quando o último processo não está em execução, mas seja cauteloso, talvez o semáforo seja usado por outros processos.
for semid in 'ipcs -s | cut -d" " -f 2' ; do pid='ipcs -s -i $semid | tail -n 2 | head -n 1 | awk '{print $5}''; running='ps --no-headers -p $pid | wc -l' ; if [ $running -eq 0 ] ; then ipcrm -s $semid ; fi ; done