Linux processus en arrière - plan - “Arrêté” dans des emplois?
Je suis actuellement en cours d'exécution d'un processus avec la &
signe.
$ example &
Toutefois, veuillez noter que je suis un newbie sur Linux), j'ai réalisé que pratiquement une seconde après cette commande, je reçois une note que mon processus a reçu un arrêté du signal. Si je ne
$ jobs
Je vais obtenir la liste avec mon exemple de processus avec une petite note "à l'arrêt". Est-il vraiment cessé et ne travaillent pas dans le fond? Comment est-il exactement de travail? Je suis de se mêler des informations à partir de l'Internet.
Vous devez vous connecter pour publier un commentaire.
Dans Linux et autres systèmes Unix, un travail qui est en cours d'exécution en arrière-plan, mais il a encore ses
stdin
(oustd::cin
) associé à son terminal de contrôle (un.k.un. la fenêtre qu'il a été exécuté) sera envoyé unSIGTTIN
signal, qui, par défaut, le programme pour être complètement à l'arrêt, dans l'attente de l'utilisateur de mettre au premier plan (fg %job
ou similaire) pour permettre l'entrée à fait être donné au programme. Pour éviter le programme de l'interruption de cette façon, vous pouvez soit:stdin
canal n'est plus associé avec le terminal, soit en la redirigeant vers un fichier avec le contenu approprié pour le programme à l'entrée ou à/dev/null
si il n'a vraiment pas besoin de la contribution - par exemplemyprogram < /dev/null &
.stdin
de s'en aller. Mais cela va causer unSIGHUP
être livré au programme (sens entrée/sortie du canal de l'expérience d'un "raccrochage") - ce qui provoque normalement un programme de résiliation, mais cela peut être évité en utilisantnohup
- par exemplenohup myprogram &
.Si vous êtes à tous les intéressés dans la capture de la sortie du programme, c'est probablement la meilleure option, car elle empêche à la fois des signaux (ainsi que quelques autres), et enregistre la sortie pour vous de regarder pour déterminer si il y a des problèmes avec les programmes d'exécution:
Oui, il est vraiment cessé et ne travaille plus dans le fond. Pour le ramener à la vie le type
fg
job_numberexample < /dev/null &
.Suffit d'entrer
fg
qui permettra de résoudre le message d'erreur lorsque vous essayez de quitter.De ce que j'ai pu rassembler.
Tâches en arrière-plan sont bloqués à partir de la lecture le terminal de l'utilisateur. Quand on essaie de le faire, il sera suspendu jusqu'à ce que l'utilisateur ramène à l'avant-plan et fournit une entrée. "lecture depuis le terminal de l'utilisateur" peut signifier soit directement en essayant de lire à partir du terminal ou de changer les paramètres du terminal.
Normalement c'est ce que vous voulez, mais parfois les programmes de lecture à partir du terminal et/ou de modifier les paramètres du terminal, non pas parce qu'ils ont besoin de la saisie de l'utilisateur à se poursuivre, mais parce qu'ils veulent vérifier si l'utilisateur est d'essayer de fournir des commentaires.
http://curiousthing.org/sigttin-sigttou-deep-dive-linux a le sanglant détails techniques.