start-stop-daemon fait cron pidfile avec pid incorrect

J'ai un script init.d pour démarrer crond qui spécifie ce qui suit pour start ():

start-stop-daemon -S --quiet --make-pidfile --pidfile /var/run/crond.pid --background --exec /usr/sbin/crond 

Cependant, le PID est toujours un nombre supérieur à celui enregistré dans /var/run/crond.pid. Quelqu'un a-t-il une idée de ce qui se passe ici? J'ai environ dix autres scripts init.d qui font également les mêmes appels, et seul cron.d a ce problème.

EDIT: C'est intéressant:

 # /usr/sbin/crond & # [1]+ Done /usr/sbin/crond # echo $! 737 # ps -eaf | grep crond 738 root /usr/sbin/crond 740 root grep crond # 

Le programme crond est conçu pour être démon. Quand il commence, l'une des premières choses qu'il fait fourche un enfant et quitte le parent. Ceci est conçu pour les environnements où l'appelant attend que le programme se ferme avant de continuer, alors que le démon doit continuer à s'exécuter en arrière-plan.

 caller ---- fork--> wait -------------------------+-> ... | | '----> exec crond ---- fork--> exit -' | '----> read crontab, wait for time of next job, ... 

Le PID enregistré par le start-stop-daemon est le PID du parent. Si aucun autre process ne se fourre pendant le court intervalle entre les deux fourchettes, le PID de l'enfant finit par être le PID du parent plus un.

Puisque start-stop-daemon est conçu pour gérer les démons et les laisser s'exécuter en arrière-plan, dites à crond de restr au premier plan, c'est-à-dire de ne pas bifurquer au début.

 caller ---- fork--> store pid; ... | | '----> exec crond -f ----> read crontab, wait for time of next job, ... 

Avec le crond de BusyBox, passez l'option -f .

 start-stop-daemon -S --quiet --make-pidfile --pidfile /var/run/crond.pid --background --exec /usr/sbin/crond -- -f