Comment envoyer des applications de command line directement en arrière-plan?

Je sais déjà qu'en appuyant sur ctrl+z arrête l'application, puis je peux envoyer l'application en arrière-plan avec la command bg , mais cela signifie qu'il y a une brève période de time que l'application est arrêtée.

Comment envoyer l'application directement en arrière-plan sans l'arrêter?

    Vous pouvez créer une tâche en arrière-plan en ajoutant un & après.

    Par exemple, tail -f /var/log/messages & mettra en arrière la tâche immédiatement.

    Comme toujours, vous pouvez voir les tâches que vous avez effectuées avec la command jobs .

    Bien sûr, cela suppose que vous n'avez pas encore exécuté la command.

    L'envoi d'une application depuis le premier plan vers l'arrière-plan requirejs la coopération du terminal et du shell. Le terminal ne peut pas le faire seul, car le shell doit définir le groupe de process de premier plan. Le shell ne peut pas le faire seul, car le terminal doit traiter la pression des touches (le shell n'est pas au premier plan, il ne peut donc pas recevoir de pression de touche).

    Une approximation proche est d'envoyer l'application à l'arrière-plan très rapidement. Après tout, une application partage le time CPU avec les autres et une pause de quelques centièmes de seconde ne devrait pas avoir d'importance. (C'est le cas pour les applications en time réel, alors assurez-vous de démarrer celles en arrière-plan.) J'utilise une binding shell pour Ctrl + Z qui envoie le travail de dernière mise à jour en arrière-plan. De cette façon, en appuyant sur Ctrl + Z Ctrl + Z envoie un travail à l'arrière-plan avec un time de suspension minimal.

    Voici ma binding zsh, qui a aussi "background" une command semi-typée quand la command line n'est pas vide .

     fancy-ctrl-z () { emulate -LR zsh if [[ $#BUFFER -eq 0 ]]; then bg zle redisplay else zle push-input fi } zle -N fancy-ctrl-z bindkey '^Z' fancy-ctrl-z 

    En anglais, pour les non-zsh-users du public:

    • Définissez une fonction shell qui effectue les opérations suivantes:

      • Si la longueur du tampon d'input est 0, mettez le travail en cours (dernier travail suspendu ou démarré) en arrière – plan et réaffichez l'invite.
      • Sinon, poussez le tampon d'input sur une stack et affichez une nouvelle invite. Une fois que l'user saisit une command ou l'annule avec Ctrl + C , le tampon poussé est ramené pour une édition ultérieure.
    • Liez cette fonction à Ctrl + Z.

    Si vous voulez juste le comportement d'arrière-plan indépendamment du fait que la command line est vide:

     function bg_ { builtin bg "$@"; } zle -N bg_ bindkey '^Z' bg_ 

    Je ne sais pas si vous pouvez faire de même en bash. Il devrait être aussi simple que bind -x '"\Cz": bg' , sauf que bash laisse le caractère tty stop en place, donc il ne reçoit jamais Ctrl + Z en input.

    Fonder une command est fait en ajoutant un esperluette à la command.

     sleep 300 & 

    S'il est déjà en cours d'exécution, votre seule option est de l'arrêter, puis de l'arrière-plan.