出现“作业停止”错误该怎么办?


62

我多次面对这种情况。

例如,每当我尝试打开一些文件emacssudo使用权限:

sudo emacs tet.c &

Ubuntu并emacs没有要求我提供密码,而只是在没有任何emacs窗口或终端上没有任何输出(pid除外)的情况下启动进程,而是看到该图像(如果我不使用'&',那么它将要求我提供密码):

在此处输入图片说明

我有两个与此有关的问题:

  1. 出现“作业已停止”错误时该怎么办?我如何识别所有这些停止的工作并杀死它们?一旦我清除了终端,我将不会收到这些已停止进程的pids。

  2. 为什么Ubuntu / emacs的行为如此?为什么不要求我输入密码?

Answers:


77

There are stopped jobs消息很远,很远就是一个错误。这只是一条通知,告诉您您试图退出Shell,但是您有一个或多个暂停的作业/程序(在您的情况下emacs,您在&命令末尾使用了后台作业/程序)。除非您打算这样做,否则系统不允许您退出Shell并杀死作业。您可以根据以下消息做几件事:

  • 使用jobs命令告诉您已暂停的工作
  • 您可以选择使用fg命令在前台添加作业
  • 如果您不在乎工作是否会终止,则可以exit再次输入;exit在有或没有中间jobs命令的情况下再次键入将导致所有暂停的作业终止。

要回答第二个问题,我将告诉您,不是Ubuntu或emacs这样。当您将应用程序置于后台运行时,这是正常现象。在这种情况下,sudo您要求输入密码,但在后台询问,因此您看不到这个事实。要查看它,您应该使用以下fg命令将作业调回前台:

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:

之后,如果需要,您可以键入Ctrl+ Z将作业再次置于后台。然后,您可以再次运行'fg'命令以使作业回到前台,依此类推。


对我而言,它始终是telnet。我忘了quit:)(见superuser.com/questions/486496/how-do-i-exit-telnet
cmroanirgo

1
因此,我只按了Ctrl + d两次(!),并且在第一个消息后得到了相同的消息。有什么办法可以弄清我刚刚干的工作是什么?
Matsmath '18

19

您收到此消息,是因为系统警告您有关与当前Shell相关的活动作业。

您可以列出这些运行/运行停止的作业:jobs

然后,您可以执行以下操作之一:

  • 通过以下方式将最后一项作业移至前台:(fgbg背景相反),
  • 运行disown删除从当前的shell这些工作没有杀死他们,
  • 通过按Ctrl+D两次以杀死这些任务来强制注销,就像键入exit/ logout两次一样,
  • 通过运行以下命令手动杀死这些作业:(强制kill $(jobs -p)添加-9
  • 如果您放弃它们,但仍想杀死所有已停止的进程,请尝试:

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


要回答有关的问题sudo,它不会要求您输入密码,因为它需要具有活动的终端才能从标准输入中接收密码,并且通过在后台运行密码,shell不会等待命令完成,因此您不可能与命令进行交互。

在这种情况下,您有3种可能性:

  • 在不进入后台(&)的情况下运行命令,
  • 从标准输入而非终端设备读取密码,sudo -S例如

    echo mypass | sudo emacs tet.c
    
  • 通过以下visudo命令将sudo配置为不要求输入密码:命令和编辑sudoers文件。请参阅:为用户启用NOPASSWD


6

遇到作业停止错误时:

  1. 输入jobs->您将看到状态为已停止的作业
  2. 然后输入exit->您可以退出终端
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.