O que devo fazer quando receber o erro 'Há trabalhos interrompidos'?

64

Enfrento esse tipo de situação muitas vezes.

Por exemplo, sempre que tento abrir algum arquivo emacscom sudodireitos usando:

sudo emacs tet.c &

Em vez de me pedir a senha, o Ubuntu apenas inicia o emacsprocesso sem nenhuma emacsjanela ou saída no terminal (exceto o pid) veja a imagem (se eu não usar '&', será solicitada a senha):

insira a descrição da imagem aqui

Eu tenho duas perguntas relacionadas a isso:

  1. O que devo fazer quando receber o erro "Há trabalhos interrompidos"? Como identifico todos esses trabalhos interrompidos e os mato? Depois de limpar o terminal, não terei problemas com esses processos interrompidos.

  2. Por que o Ubuntu / emacs está se comportando assim? Por que não me pede a senha?

Ponteiro nulo
fonte

Respostas:

79

There are stopped jobsmensagem está muito, muito longe para ser um erro. É apenas uma notificação informando que você tenta sair do shell, mas você tem um ou mais trabalhos / programas suspensos (no seu caso, emacsvocê colocou em segundo plano usando &no final do seu comando). O sistema não permite que você saia do shell e elimine os trabalhos, a menos que você queira. Você pode fazer algumas coisas em resposta a esta mensagem:

  • use o jobscomando para informar quais trabalhos você suspendeu
  • você pode optar por adicionar os trabalhos em primeiro plano usando o fgcomando
  • se você não se importa se os trabalhos serão encerrados, basta digitar exitnovamente; digitar exituma segunda vez com ou sem um jobscomando intermediário resultará no encerramento de todos os trabalhos suspensos.

Para responder à segunda pergunta, vou lhe dizer que não o Ubuntu ou o emacs se comportando assim. Esse é um comportamento normal quando você coloca um aplicativo para execução em segundo plano. Nesse caso, sudoestá solicitando senha, mas está solicitando em segundo plano, portanto você não pode ver esse fato. Para vê-lo, você deve retornar o trabalho em primeiro plano usando o 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:

Depois disso, você pode digitar Ctrl+ Zpara colocar novamente o trabalho em segundo plano, se desejar. Em seguida, você pode executar novamente o comando 'fg' para retornar o trabalho em primeiro plano e assim por diante.

Radu Rădeanu
fonte
Para mim, é sempre telnet. Eu esqueço quit:) :) (consulte superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo
1
Então, pressionei Ctrl + d duas vezes (!) E recebi a mesma mensagem após a primeira. Existe alguma maneira de descobrir qual foi o trabalho que acabei de matar?
Matsmath 01/12/19
19

Você recebeu a mensagem, porque o sistema avisa sobre trabalhos ativos associados ao seu shell atual.

Você pode listar estes Correr / empregos parado executando: jobs,

Então você pode executar um dos seguintes procedimentos:

  • mova o último trabalho para o primeiro plano por: fg(oposto de bgpara segundo plano),
  • execute disownpara remover esses trabalhos do seu shell atual sem matá-los,
  • forçar o logout matando essas tarefas pressionando Ctrl+Dduas vezes, o mesmo que digitar exit/ logoutduas vezes,
  • mate esses trabalhos manualmente executando: kill $(jobs -p)(adicione -9à força)
  • se você os rejeitar e ainda assim quiser matar todos os processos interrompidos, tente:

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


Para responder a uma pergunta sudo, ela não solicitará a senha, pois requer um terminal ativo para receber a senha da entrada padrão e, executando-o em segundo plano, o shell não espera que o comando seja concluído. , para que você não tenha a possibilidade de interagir com o comando.

Nesse caso, você tem três possibilidades:

  • execute o comando sem entrar em background ( &),
  • leia a senha da entrada padrão em vez do dispositivo terminal, por sudo -Sexemplo

    echo mypass | sudo emacs tet.c
    
  • configure o sudo para não solicitar a senha: visudocomando e edição do sudoersarquivo. Consulte: Ativar NOPASSWDpara usuário

kenorb
fonte
6

Quando você encontra um erro de trabalho interrompido :

  1. digite jobs-> você verá os trabalhos com status parado
  2. e digite exit-> você pode sair do terminal
santhosh kumar
fonte