Sèkun Blog

Lancer une tâche en arrière-plan avec zsh qui perdure après la destruction du shell

Sekun   26-05-2020 12:41 informatique

En zsh, lorsqu'on lance une commande en arrière plan via le caractère & placé à la fin, la commande est stoppée lorsque l'on quitte le shell, contrairement à bash.

Lançons le programme emacs (avec l'excellente config doom emacs pour ma part) en arrière plan.

$ emacs &
[1] 263543

On voit que le processus emacs est lancé et a pour pid 263543. On peut vérifier que son ppid (le pid du processus père) est bien bash.

$ ps -o pid,ppid,comm 
    PID    PPID COMMAND
 263361  261773 bash
 263543  263361 emacs

En quittant bash (commande exit ou CTRL-D), le processus emacs n'est pas tué, mais son ppid a changé.

$ ps -o pid,ppid,comm 
    PID    PPID COMMAND
  263543      1 emacs

Avec zsh, si vous lancez la même commande emacs se terminant par &, lorsque vous allez quittez le shell, vous aurez le message de confirmation suivant:

zsh: you have running jobs

Cela vous indique que le processus enfant sera tué si vous quittez ce shell.

Avec zsh, pour avoir le même comportement, il faut lancer une commande avec &| signifiant disown (voir man zshbuiltins).

$ ps -eo pid,ppid,comm -fp 263543
    PID    PPID COMMAND
 263543       1 emacs

Des commentaires ? J'y répondrai sur mastodon .

Ce texte est publié sous la licence cc-by-sa.