Que dois-je faire lorsque le message d'erreur "Il y a des emplois arrêtés"?


64

Je fais face à ce type de situation plusieurs fois.

Par exemple, chaque fois que j'essaie d'ouvrir un fichier emacsavec des sudodroits en utilisant:

sudo emacs tet.c &

Au lieu de me demander le mot de passe, Ubuntu commence simplement le emacsprocessus sans aucune emacsfenêtre ni sortie sur le terminal (à l'exception du pid). Voir l'image (si je n'utilise pas '&', il me demandera le mot de passe):

entrez la description de l'image ici

J'ai deux questions liées à ceci:

  1. Que dois-je faire quand je reçois une erreur indiquant qu'il y a des emplois arrêtés? Comment identifier tous ces emplois arrêtés et les tuer? Une fois le terminal effacé, je n'aurai plus de pids de ces processus arrêtés.

  2. Pourquoi Ubuntu / emacs se comportent-ils de la sorte? Pourquoi ne me demande-t-il pas le mot de passe?

Réponses:


79

There are stopped jobsle message est loin, loin d'être une erreur. Il s'agit simplement d'une notification vous indiquant que vous tentez de quitter le shell, mais que vous avez un ou plusieurs programmes / travaux suspendus (dans votre cas, emacsvous les avez mis en arrière-plan à l'aide &de la fin de votre commande). Le système ne vous permet pas de quitter le shell et de supprimer les travaux à moins que vous ne le vouliez. Vous pouvez faire plusieurs choses en réponse à ce message:

  • Utilisez la jobscommande pour vous dire quel travail (s) que vous avez suspendu
  • vous pouvez choisir d'ajouter le ou les travaux au premier plan à l'aide de la fgcommande
  • si vous ne vous souciez pas de la fin du travail, vous pouvez simplement taper à exitnouveau; taper exitune seconde fois avec ou sans une jobscommande intermédiaire entraînera la fin de tous les travaux suspendus.

Pour répondre à la deuxième question, je vous dirai que ni Ubuntu ni emacs ne se comportent de la sorte. Ce comportement est normal lorsque vous mettez une application à exécuter en arrière-plan. Dans ce cas, sudodemande un mot de passe, mais demande en arrière-plan, vous ne pouvez donc pas voir ce fait. Pour le voir, vous devez ramener le travail au premier plan à l'aide de la fgcommande:

radu@Radu: ~ $ sudo emacs tet.c &
[1] 7732
radu@Radu: ~ $ # now sudo emacs run in background so you can't see nothing about what's happening
radu@Radu: ~ $ fg
[sudo] password for radu:

Ensuite, vous pouvez taper Ctrl+ Zpour remettre le travail en arrière-plan si vous le souhaitez. Ensuite, vous pouvez exécuter à nouveau la commande 'fg' pour ramener le travail au premier plan, etc.


Pour moi, c'est toujours telnet. J'ai oublié de quit:) (voir superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo

1
Donc, j'ai juste appuyé deux fois sur Ctrl + d (!) Et j'ai reçu le même message après le premier. Y a-t-il un moyen de savoir quel était le travail que je viens de tuer?
Matsmath

20

Vous avez reçu le message, car le système vous avertit des tâches actives associées à votre shell actuel.

Vous pouvez énumérer en cours d' exécution / arrêtés emplois en exécutant: jobs,

Ensuite, vous pouvez effectuer l’une des opérations suivantes:

  • déplacer le dernier emploi au premier plan de: fg(opposé de bgpour arrière-plan),
  • exécutez disownpour supprimer ces travaux de votre shell actuel sans les tuer,
  • forcer la déconnexion en éliminant ces tâches en appuyant Ctrl+Ddeux fois, comme si vous tapiez exit/ logoutdeux fois,
  • tuer ces travaux manuellement en exécutant: kill $(jobs -p)(add -9for force)
  • si vous les désavouez et que vous voulez toujours tuer tous les processus arrêtés, essayez:

    kill $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')


Pour répondre à une question sudo, il ne vous demandera pas le mot de passe, car il nécessite un terminal actif pour recevoir le mot de passe de l'entrée standard , et en l'exécutant en arrière-plan, le shell n'attend pas la fin de la commande afin que vous n'ayez pas la possibilité d'interagir avec la commande.

Dans ce cas, vous avez 3 possibilités:

  • lancer la commande sans entrer en arrière-plan ( &),
  • lisez le mot de passe depuis l'entrée standard au lieu du terminal, par sudo -Sexemple

    echo mypass | sudo emacs tet.c
    
  • configurez sudo pour ne pas demander le mot de passe par: visudocommande et édition de sudoersfichier. Voir: Activer NOPASSWDpour l'utilisateur


6

Lorsque vous rencontrez une erreur de travail arrêté :

  1. tapez jobs-> vous verrez les travaux avec le statut arrêté
  2. puis tapez exit-> vous pouvez sortir du terminal
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.