For some reason monerod gets angry if it reads EOF from stdin and decides to exit. I don't know why. Go ahead, try it:
monerod < /dev/null
This is really unfriendly behavior for daemons, because it is incompatible with process supervision (daemontools, runit, etc) which keep the daemon as a child process of the supervisor so it can do things like notice when the child dies and restart it, prevent two copies of the daemon from running at the same time (no more stupid pidfiles) or centralize logging policy by having the daemons send their logs to stdout.
Running monerod with the --detach option is not what I want; this causes it to double-fork and deliberately trick the parent process into thinking it has died.
How do I get monero to just act like a normal daemon?