Was soll ich tun, wenn der Fehler "Es wurden Aufträge gestoppt" angezeigt wird?

62

Ich stehe oft vor einer solchen Situation.

Wenn ich zum Beispiel versuche, eine Datei emacsmit den folgenden sudoRechten zu öffnen :

sudo emacs tet.c &

Anstatt mich nach dem Passwort zu fragen, startet Ubuntu den emacsProzess nur ohne emacsFenster oder Ausgabe auf dem Terminal (mit Ausnahme der PID). Siehe das Bild (wenn ich kein '&' benutze, werde ich nach dem Passwort gefragt):

Bildbeschreibung hier eingeben

Ich habe zwei Fragen dazu:

  1. Was kann ich tun, wenn die Fehlermeldung "Es wurden Aufträge gestoppt" angezeigt wird? Wie identifiziere ich alle abgebrochenen Jobs und töte sie? Sobald ich das Terminal geleert habe, werden mir keine Pids dieser gestoppten Prozesse angezeigt.

  2. Warum verhält sich Ubuntu / Emacs so? Warum fragt es mich nicht nach dem Passwort?

Null Zeiger
quelle

Antworten:

77

There are stopped jobsNachricht ist weit, weit weg , um ein Fehler zu sein. Es handelt sich lediglich um eine Benachrichtigung, emacsdie Sie darüber informiert , dass Sie versuchen, die Shell zu verlassen, jedoch einen oder mehrere Jobs / Programme angehalten haben (in Ihrem Fall, die Sie &am Ende Ihres Befehls im Hintergrund ausgeführt haben). Das System lässt Sie nicht die Shell verlassen und die Jobs beenden, es sei denn, Sie möchten. Als Antwort auf diese Nachricht können Sie folgende Aktionen ausführen:

  • Verwenden Sie den jobsBefehl, um anzugeben, welche Jobs Sie angehalten haben
  • Mit dem fgBefehl können Sie die Jobs im Vordergrund hinzufügen
  • Wenn es Ihnen egal ist, ob die Jobs beendet werden, können Sie sie einfach exiterneut eingeben. Wenn Sie exitein zweites Mal mit oder ohne jobsBefehl tippen, werden alle angehaltenen Jobs beendet.

Um die zweite Frage zu beantworten, werde ich Ihnen sagen, dass sich Ubuntu oder Emacs nicht so verhalten. Dies ist ein normales Verhalten, wenn Sie eine Anwendung im Hintergrund ausführen. In diesem Fall sudowird nach dem Passwort gefragt, aber im Hintergrund, sodass Sie diese Tatsache nicht sehen können. Um dies zu sehen, sollten Sie den Job mit dem folgenden fgBefehl wieder in den Vordergrund bringen :

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:

Danach können Sie Ctrl+ eingeben Z, um den Job wieder in den Hintergrund zu stellen, wenn Sie möchten. Dann können Sie den Befehl 'fg' erneut ausführen, um den Job wieder in den Vordergrund zu bringen und so weiter.

Radu Rădeanu
quelle
Für mich ist es immer Telnet. Ich vergesse quit:) (siehe superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo
1
Also habe ich einfach zweimal (!) Strg + d gedrückt und nach dem ersten die gleiche Nachricht erhalten. Gibt es eine Möglichkeit herauszufinden, welchen Job ich gerade getötet habe?
Matsmath
19

Sie haben die Meldung erhalten, weil das System Sie vor aktiven Jobs warnt, die mit Ihrer aktuellen Shell verknüpft sind.

Sie können führen Sie diese zum Laufen / gestoppt Jobs ausgeführt wird : jobs,

Dann können Sie eine der folgenden Aktionen ausführen:

  • verschiebe letzten Job in den Vordergrund von: fg(Gegenteil von bgfür Hintergrund),
  • Führen Sie disownden Befehl aus, um diese Jobs aus Ihrer aktuellen Shell zu entfernen, ohne sie zu beenden.
  • Kraft Abmeldung durch diese Aufgaben zu töten , indem Sie Ctrl+Dzweimal, gleiche wie die Eingabe exit/ logoutzweimal,
  • Beenden Sie diese Jobs manuell, indem Sie Folgendes ausführen: kill $(jobs -p)(Add -9for Force)
  • Wenn Sie sie ablehnen und dennoch alle gestoppten Prozesse beenden möchten, versuchen Sie Folgendes:

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


Um die Frage zu beantworten sudo, werden Sie nicht nach dem Kennwort gefragt, da ein aktives Terminal erforderlich ist, um das Kennwort von der Standardeingabe zu erhalten. Wenn Sie es im Hintergrund ausführen, wartet die Shell nicht, bis der Befehl beendet ist Sie haben also keine Möglichkeit, mit dem Befehl zu interagieren.

In diesem Fall haben Sie 3 Möglichkeiten:

  • Befehl ausführen, ohne in den Hintergrund zu gehen ( &),
  • Lesen Sie das Passwort von der Standardeingabe anstelle des Endgeräts durch sudo -Sz

    echo mypass | sudo emacs tet.c
    
  • Konfigurieren Sie sudo so, dass Sie nicht nach dem Kennwort gefragt werden: visudoBefehl und Bearbeitungsdatei sudoers. Siehe: Für Benutzer aktivierenNOPASSWD

Kenorb
quelle
6

Wenn Sie auf einen gestoppten Auftragsfehler stoßen :

  1. Typ jobs-> Sie sehen die Jobs mit dem Status "Gestoppt"
  2. und dann tippe exit-> du kannst das Terminal verlassen
Santhosh Kumar
quelle