At some point it looks like start-memcached was changed to fork an extra time, as the comments put it, "now that the tty is closed." I'm not sure why, but what I noticed is that the wrong PID was being written to the PID file. It was writing the PID of the intermediate fork, not the one of the child that was getting replaced by the exec. So I just moved the code that writes the PID to the child of the first fork and it's working for me again. With this fix the init script can stop the server that it had started. Here's a patch for that very simple fix.
Thanks, Nathan Shafer --- start-memcached.orig 2011-09-29 11:19:42.000000000 -0700 +++ start-memcached 2011-09-29 11:23:15.000000000 -0700 @@ -112,18 +112,17 @@ # must fork again now that tty is closed $pid = fork(); if ($pid) { + if(open PIDHANDLE,">$pidfile") + { + print PIDHANDLE $pid; + close PIDHANDLE; + }else{ + + print STDERR "Can't write pidfile to $pidfile.\n"; + } exit(0); } exec "$memcached $params"; exit(0); -}else{ - if(open PIDHANDLE,">$pidfile") - { - print PIDHANDLE $pid; - close PIDHANDLE; - }else{ - - print STDERR "Can't write pidfile to $pidfile.\n"; - } }