J'utilise ruby pour démarrer un service d'arrière-plan. Je stocke PID pour ce service pour le terminer plus tard. Disons que pour la simplicité j'ai besoin d'exécuter le service d'arrière-plan "sleep 1000"
. J'utilise cette commande et il fonctionne correctementLinux exécute un processus fils avec redirection sans engendrer un nouveau processus
child_pid = fork {exec("sleep 1000")} # => 7845
ps
7845 pts/15 00:00:00 sleep
child_pid
stocke PID du sommeil. Toutefois, lorsque j'essaie de rediriger la sortie standard vers un fichier (pour la journalisation), il se comporte différemment.
child_pid = fork {exec("sleep 1000 > sleep.log")} # => 7829
Dans ce cas, child_pid
est un PID d'un processus de sh, et le processus de sommeil prend un autre PID.
ps
7829 pts/15 00:00:00 sh
7832 pts/15 00:00:00 sleep
Une explication à cela? Lorsque vous utilisez une commande simple, elle peut être exécutée directement.