91 votes

Comment exécuter un Shell Shell en arrière-plan ?

Comment exécuter un Shell Shell en arrière-plan ?

145voto

Panther Points 96601

En fonction de ce que vous voulez, il suffit d'ajouter un & à la fin de la commande

script.sh &
command &

Si vous l'exécutez dans un terminal, et que vous voulez ensuite fermer le terminal, utilisez nohup ou disown.

nohup

nohup script.sh &

désavouer

script &
disown

Si ce n'est pas ce que vous recherchez, veuillez être plus précis dans votre question.

6voto

Gohu Points 346

Si vous voulez que le script reste après la fermeture du terminal, une autre option est d'utiliser setsid :

setsid script.sh

Pour plus d'informations sur les différences entre nohup , disown , & y setsid : Différence entre nohup, disown et &.

5voto

Lukas Liesis Points 269

Vous pouvez simplement changer d'écran et exécuter votre script sur ce 2ème écran. Lorsque script a démarré sur le 2ème écran, revenez sur le 1er et faites ce que vous voulez. Le 2ème écran sera en arrière-plan comme une "fenêtre de terminal" supplémentaire et il ne s'arrêtera pas de fonctionner même si vous fermez votre connexion ssh pendant que vous êtes sur le 1er écran.

screen --help
Use: screen [-opts] [cmd [args]]
 or: screen -r [host.tty]

Options:
-4            Resolve hostnames only to IPv4 addresses.
-6            Resolve hostnames only to IPv6 addresses.
-a            Force all capabilities into each window's termcap.
-A -[r|R]     Adapt all windows to the new display width & height.
-c file       Read configuration file instead of '.screenrc'.
-d (-r)       Detach the elsewhere running screen (and reattach here).
-dmS name     Start as daemon: Screen session in detached mode.
-D (-r)       Detach and logout remote (and reattach here).
-D -RR        Do whatever is needed to get a screen session.
-e xy         Change command characters.
-f            Flow control on, -fn = off, -fa = auto.
-h lines      Set the size of the scrollback history buffer.
-i            Interrupt output sooner when flow control is on.
-l            Login mode on (update /var/run/utmp), -ln = off.
-ls [match]   or -list. Do nothing, just list our SockDir [on possible matches].
-L            Turn on output logging.
-m            ignore $STY variable, do create a new screen session.
-O            Choose optimal output rather than exact vt100 emulation.
-p window     Preselect the named window if it exists.
-q            Quiet startup. Exits with non-zero return code if unsuccessful.
-r [session]  Reattach to a detached screen process.
-R            Reattach if possible, otherwise start a new session.
-s shell      Shell to execute rather than $SHELL.
-S sockname   Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title      Set title. (window's name).
-T term       Use term as $TERM for windows, rather than "screen".
-U            Tell screen to use UTF-8 encoding.
-v            Print "Screen version 4.01.00devel (GNU) 2-May-06".
-wipe [match] Do nothing, just clean up SockDir [on possible matches].
-x            Attach to a not detached screen. (Multi display mode).
-X            Execute <cmd> as a screen command in the specified session.

ctrl + a , c créera une nouvelle "fenêtre" dans votre session d'écran active. Vous pouvez basculer entre plusieurs fenêtres (comme Ansgar l'a indiqué) avec ctrl + a , n pour la fenêtre suivante, et ctrl + a , p pour la fenêtre précédente.

ctrl + a , " vous donnera une liste de toutes vos fenêtres ouvertes.

Plus : https://superuser.com/questions/476709/quickly-switching-between-virtual-sessions-screen

1voto

ntreq Points 11

Si votre processus est déjà en cours, vous pouvez mettre son exécution en arrière-plan. ctrl + z arrêtera le processus, et bg continuera le processus en arrière-plan

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X