J'ai un processus en cours d'exécution à l'avant-plan. J'ai suspendu par Ctrl+ Z, puis j'ai repris l'exécution en arrière-plan bg <jobid>
.
Je me demande comment suspendre un processus en arrière-plan?
Comment puis-je faire apparaître un processus d'arrière-plan au premier plan?
Modifier:
Le processus est envoyé à stderr, comment dois-je exécuter la commande fg <jobid>
pendant que le processus est envoyé au terminal?
fg <jobid>
pour le faire apparaître au premier plan?Réponses:
Comme Tim a dit, tapez
fg
pour ramener le dernier processus au premier plan.Si vous avez plusieurs processus en cours d'exécution en arrière-plan, procédez comme suit:
fg %3
pour ramener levim 23
processus au premier plan.Pour suspendre le processus en arrière-plan, utilisez:
Le signal SIGSTOP arrête (met en pause) un processus essentiellement de la même manière Ctrl+ Z.
exemple:
kill -STOP %3
.sources: comment envoyer des signaux aux processus sous Linux et Unix et comment gérer les travaux d’arrière-plan et de premier plan .
la source
SIGCONT
pour moi; J'utilisekill -STOP
etkill -CONT
de préférence me souvenir des chiffres de toute façon, mais vous pouvez vérifierkill -l
pour vous rappeler les valeurs numériquesjob
etfg <jobid>
pendant que le processus est envoyé au terminal?kill -STOP %job_id
comme expliquéCela devrait être vrai de tout shell avec contrôle de travail, que vous pouvez prendre pour acquis (pour la plupart) à moins de traiter avec un shell vraiment ancien. C'est le standard POSIX , donc
dash
supporte même le contrôle du travail (lorsqu'il est exécuté de manière interactive ou avec-m
).Interactif
bg
Contiendra le dernier programme suspendu(à utiliser
bg %2
avec le numéro du travail que vous pouvez vérifierjobs
)fg
mettra en avant le programme suspendu le plus récemmentDans
zsh
, vous pouvez écrire une liaison de clé à exécuter implicitement àfg
partir de l'invite via un autre Ctrl+ z:Il existe probablement aussi un moyen astucieux de procéder implicitement
bg
à la suspension, mais cela semble peu judicieux; du moins pour moi, la majorité de mon Ctrl+ zusage est dû au fait que Ctrl+ cne parvient pas à éclater; Je veux suivre cela avec, par exemple,kill %1
plutôt quebg
, et je ne veux certainement pas laisser tomber le meurtre! (Cette logique s'étend également à la raison pour laquelle je n'utilise plus cette liaison de clé: si je martèle Ctrl+ zpour arrêter un processus, la dernière chose que je veux qu'il fasse est de reprendre!)Non interactif
Si vous êtes dans une autre instance du shell (ou un utilisateur différent, y compris parfois des
sudo
commandes), vous ne pourrez probablement pas utiliser de numéro de travail.Vous pouvez toujours agir sur un autre processus une fois que vous connaissez son ID de processus (PID). Vous pouvez obtenir le PID avec
pgrep …
, oups aux |grep …
(ou à partir du même shell,,jobs -l
ou$!
) et vous pouvez ensuite exécuter:Si vous ne connaissez pas l'ID du processus et que vous ne craignez pas de suspendre son nom par d'autres instances du processus, vous pouvez transmettre des signaux à l'un de ces éléments:
Un
CONT
signal envoyé à un programme arrêté avec Ctrl+ z(et nonbg
'd) reprendra sa progression (au premier plan), comme si vous y étiezfg
.Re: erreur standard
La modification de cette question concerne l'erreur standard:
À moins que le travail en question ne contienne des composants avec arrière-plan (ou que le travail tout entier soit peut-être via
kill -CONT
, par exemple ), vous ne devriez pas voir la sortie tant qu'elle est suspendue.S'il émet toujours des données (que ce soit sur la sortie standard ou sur l'erreur standard), votre terminal sera visuellement surchargé visuellement, mais toute cette sortie sera ignorée car elle ne fait pas partie de votre entrée. Cela peut rendre plus difficile le fait de savoir que vous n'avez pas saisi de fautes de frappe, mais la frappe (à l'aveugle)
fg
Enterdevrait suffire (à moins que vous n'ayez plusieurs travaux et que celui en question ne soit pas le plus récent, auquel cas vous aurez effectivement besoin du descripteur de travail. ).Si vous avez besoin de trouver le descripteur de travail, utilisez un autre terminal pour lui envoyer le
STOP
signal via les méthodes non interactives ci-dessus. Cela devrait libérer votre affichage (peut-être frappé Enterplusieurs fois ou exécutéclear
ou Ctrl+ L) afin que vous puissiez ensuitejobs
rechercher le descripteur de travail, puis exécuterfg %N
où seN
trouve ce nombre.la source
CONT
signal à un processus (travail / pipeline) arrêté avec Ctrl + Z, il reprendra en arrière-plan, même si vous ne l'avez pas encorebg
fait.Tapez
fg
pour l'amener au premier plan.la source
fg <jobid>
pendant que le processus est envoyé au terminal?jobs
commandefg
; par exemple:fg %4
CTRL Z
pour suspendrebg %4
la source
La fin d'un processus peut être effectuée de plusieurs manières différentes. Souvent, à partir d'une commande basée sur la console, l'envoi d'une Ctrlcfrappe de touche (le caractère d'interruption par défaut) permet de quitter la commande. Cela fonctionne lorsque le processus s'exécute en mode avant-plan.
Si un processus est en cours d'exécution en arrière-plan, vous devez d'abord obtenir son ID de travail à l'aide de la
ps
commande, puis utiliser la commande kill pour tuer le processus de la manière suivante:Ici, la
kill
commande mettrait fin aufirst_one
processus. Si un processus ignore unekill
commande normale , vous pouvez utiliserkill -9
suivi de l'ID de processus comme suit:la source