net-proxy/squid/files/squid.initd-r6 attempts to derive the pidfile path from reading the service's config file: squid.initd-r6: local PIDFILE=$(cat ${CONFFILES} 2>/dev/null 3>/dev/null | awk '/^[ \t]*pid_filename[ \t]+/ { print $2 }') ... squid.initd-r6: [ -z ${PIDFILE} ] && PIDFILE=/run/squid.pid ... However, if squid.conf enables chroot ("chroot /var/chroot/squid" or whatnot), then that pid_filename will be relative to the chroot top. We don't account for that so we are looking in the wrong place. Calling reload, rotate functions just calls squid -k ... and it reads the config correctly and does the right thing. stop() starts out doing the right thing too (calls squid -k shutdown), but then when we loop waiting for squid to exit (cleanup can take a while), we are watching for the pidfile in the wrong place and quit waiting immediately. I think this bug has been present ever since pid_filename extraction was added in 2009.