Co powinienem zrobić, gdy pojawi się błąd „Zadania są zatrzymane”?

62

Wiele razy spotykam się z tego typu sytuacjami.

Na przykład za każdym razem, gdy próbuję otworzyć jakiś plik emacsz sudoprawami, używając:

sudo emacs tet.c &

Zamiast pytać mnie o hasło, Ubuntu po prostu uruchamia emacsproces bez emacsokna lub danych wyjściowych na terminalu (z wyjątkiem pid), zobacz obraz (jeśli nie użyję „&”, poprosi mnie o hasło):

wprowadź opis zdjęcia tutaj

Mam z tym dwa pytania:

  1. Co powinienem zrobić, gdy pojawia się błąd „Zadania są zatrzymane”? Jak zidentyfikować wszystkie takie zatrzymane zadania i je zabić? Po wyczyszczeniu terminalu nie będę mieć pid tych zatrzymanych procesów.

  2. Dlaczego Ubuntu / emacs zachowuje się tak? Dlaczego nie pyta mnie o hasło?

Wskaźnik zerowy
źródło

Odpowiedzi:

77

There are stopped jobswiadomość jest daleko, daleko, aby być błędem. To tylko powiadomienie z informacją, że próbujesz wyjść z powłoki, ale masz jedno lub więcej zawieszonych zadań / programów (w twoim przypadku, emacsktóre umieściłeś w tle przy &końcu polecenia). System nie pozwala ci wyjść z powłoki i zabijać zadań, chyba że masz na to ochotę. W odpowiedzi na tę wiadomość możesz zrobić kilka rzeczy:

  • użyj jobspolecenia, aby powiedzieć ci, które zadania zostały zawieszone
  • możesz dodać zadanie (zadania) na pierwszym planie, używając fgpolecenia
  • jeśli nie obchodzi Cię, czy zadanie (zadania) zostaną zakończone, możesz po prostu wpisać exitponownie; exitpowtórne wpisanie komendy lub bez niej jobsspowoduje zakończenie wszystkich zawieszonych zadań.

Aby odpowiedzieć na drugie pytanie, powiem ci, że nie Ubuntu ani emacs zachowują się w ten sposób. Jest to normalne zachowanie po uruchomieniu aplikacji w tle. W tym przypadku sudoprosi o hasło, ale pyta w tle, więc nie widać tego faktu. Aby to zobaczyć, powinieneś przywrócić zadanie na pierwszym planie, używając fgpolecenia:

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:

Następnie możesz wpisać Ctrl+, Zaby ponownie umieścić zadanie w tle, jeśli chcesz. Następnie możesz ponownie uruchomić polecenie „fg”, aby przywrócić zadanie na pierwszym planie i tak dalej.

Radu Rădeanu
źródło
Dla mnie zawsze jest to telnet. Zapominam quit:) (patrz superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo
1
Więc właśnie nacisnąłem Ctrl + d dwa razy (!) I dostałem tę samą wiadomość po pierwszym. Czy jest jakiś sposób, aby dowiedzieć się, jaką pracę właśnie zabiłem?
Matsmath,
19

Otrzymałeś wiadomość, ponieważ system ostrzega o aktywnych zadaniach związanych z bieżącą powłoką.

Można wymienić te działa / zatrzymany pracę uruchamiając: jobs,

Następnie możesz wykonać jedną z następujących czynności:

  • przenieś ostatnią pracę na pierwszy plan przez: fg(przeciwnie bgdo tła),
  • uruchom, disownaby usunąć te zadania z bieżącej powłoki bez ich zabijania,
  • wymuś wylogowanie, zabijając te zadania, naciskając Ctrl+Ddwa razy, tak samo jak pisanie exit/ logoutdwa razy,
  • zabij te zadania ręcznie, uruchamiając: kill $(jobs -p)(dodaj -9dla siły)
  • jeśli je odrzucisz i nadal chcesz zabić wszystkie zatrzymane procesy, spróbuj:

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


Aby odpowiedzieć na pytanie sudo, nie poprosi cię o hasło, ponieważ wymaga posiadania aktywnego terminala, aby otrzymać hasło ze standardowego wejścia , a uruchamiając je w tle, powłoka nie czeka na zakończenie polecenia , więc nie masz możliwości interakcji z poleceniem.

W tym przypadku masz 3 możliwości:

  • uruchom polecenie bez wchodzenia w tło ( &),
  • odczytać hasło ze standardowego wejścia zamiast urządzenia końcowego sudo -Snp

    echo mypass | sudo emacs tet.c
    
  • skonfiguruj sudo, aby nie pytał o hasło przez: visudopolecenie i edycję sudoerspliku. Zobacz: Włącz NOPASSWDdla użytkownika

kenorb
źródło
6

Gdy napotkasz błąd zatrzymanych zadań :

  1. wpisz jobs-> zobaczysz zadania ze statusem zatrzymanym
  2. a następnie wpisz exit-> możesz wyjść z terminala
Santhosh Kumar
źródło