Cosa devo fare quando viene visualizzato l'errore "Ci sono lavori interrotti"?


64

Devo affrontare questo tipo di situazione molte volte.

Ad esempio, ogni volta che provo ad aprire un file emacscon sudodiritti usando:

sudo emacs tet.c &

Invece di chiedermi la password Ubuntu avvia il emacsprocesso senza alcuna emacsfinestra o output sul terminale (tranne per il pid) vedere l'immagine (se non uso '&' allora mi chiederà la password):

inserisci qui la descrizione dell'immagine

Ho due domande relative a questo:

  1. Cosa devo fare quando viene visualizzato l'errore "Ci sono lavori interrotti"? Come posso identificare tutti questi lavori interrotti e ucciderli? Una volta cancellato il terminale non avrò pid di questi processi arrestati.

  2. Perché Ubuntu / emacs si comporta in questo modo? Perché non mi chiede la password?

Risposte:


79

There are stopped jobsil messaggio è molto, molto lontano per essere un errore. È solo una notifica che ti dice che tenti di uscire dalla shell, ma hai uno o più lavori / programmi sospesi (nel tuo caso emacsche hai messo in background usando &alla fine del tuo comando). Il sistema non ti consente di uscire dalla shell e terminare i lavori a meno che tu non voglia. Puoi fare un paio di cose in risposta a questo messaggio:

  • utilizzare il jobscomando per dirti quali lavori sono stati sospesi
  • puoi scegliere di aggiungere i lavori in primo piano usando il fgcomando
  • se non ti interessa se i lavori termineranno, puoi semplicemente digitare di exitnuovo; digitando exituna seconda volta con o senza un jobscomando intermedio si avrà la fine di tutti i lavori sospesi.

Per rispondere alla seconda domanda, ti dirò che non Ubuntu o Emacs si comportano così. Questo è un comportamento normale quando si esegue un'applicazione in esecuzione in background. In questo caso sudochiede la password, ma chiede in background, quindi non puoi vedere questo fatto. Per vederlo, dovresti riportare il lavoro in primo piano usando il fgcomando:

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:

Dopodiché puoi digitare Ctrl+ Zper rimettere il lavoro in background se vuoi. Quindi è possibile eseguire nuovamente il comando 'fg' per riportare il lavoro in primo piano e così via.


Per me, è sempre telnet. Dimentico di quit:) (vedi superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo,

1
Quindi, ho appena premuto Ctrl + d due volte (!) E ho ricevuto lo stesso messaggio dopo il primo. C'è un modo per capire quale fosse il lavoro che ho appena ucciso?
Matsmath,

20

Hai ricevuto il messaggio, perché il sistema ti avvisa dei lavori attivi associati alla shell corrente.

Si possono elencare questi funzionante / smesso di posti di lavoro eseguendo: jobs,

Quindi è possibile effettuare una delle seguenti operazioni:

  • sposta l'ultimo lavoro in primo piano per: fg(opposto a bgper lo sfondo),
  • eseguire disownper rimuovere questi lavori dalla shell corrente senza ucciderli,
  • forzare il logout uccidendo queste attività premendo Ctrl+Ddue volte, lo stesso che digitare exit/ logoutdue volte,
  • termina manualmente questi lavori eseguendo: kill $(jobs -p)(aggiungi -9per forza)
  • se li rinneghi e vuoi ancora uccidere tutti i processi arrestati, prova:

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


Per rispondere a una domanda sudo, non ti chiederà la password, poiché richiede di avere un terminale attivo per ricevere la password dall'input standard e, eseguendolo in background, la shell non attende che il comando finisca , quindi non hai la possibilità di interagire con il comando.

In questo caso, hai 3 possibilità:

  • esegui comando senza andare in background ( &),
  • leggere la password dall'input standard anziché dal dispositivo terminale sudo -Sad es

    echo mypass | sudo emacs tet.c
    
  • configurare sudo per non richiedere la password: visudocomando e modifica del sudoersfile. Vedi: Abilita NOPASSWDper l'utente


6

Quando si verificano errori di processi interrotti :

  1. digitare jobs-> vedrai i lavori con stato interrotto
  2. e quindi digita exit-> puoi uscire dal terminale
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.