当前位置: 首页>>技术问答>>正文


当我收到“有停止的工作”错误时,我该怎么办?

, , ,

问题描述

我多次面对这种情况。

例如,每当我尝试使用sudo权限打开emacs中的某个文件时:

sudo emacs tet.c &

不要问我要密码的Ubuntu的只是开始emacs过程中没有任何emacs窗口或终端上的任何输出(除了PID)看到的图像(如果我不使用’&’然后它会问我输入密码):

process,emacs,job-control,ubuntu

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

  1. 当我收到“有停止的工作”的错误时,我该怎么办?我如何识别所有这些已停止的工作并将其杀死?一旦我清除了终端,我将无法获得这些已停止的进程。

  2. 为什么Ubuntu /emacs的行为如此?为什么不问我密码?

最佳解决办法

There are stopped jobs消息远远不是一个错误。这只是一个通知,告诉您尝试退出shell,但是您有一个或多个暂停的作业/程序(在您的情况下emacs,您在后台使用&在命令结尾处进行了调整)。除非您的意思是,系统不允许您退出shell并终止作业。你可以做几件事来回应这条消息:

  • 使用jobs命令告诉您已暂停的作业

  • 您可以选择使用fg命令在前台添加作业

  • 如果你不在乎作业是否会终止,你可以再次输入exit;无论有没有插入jobs命令,第二次键入exit将导致所有暂停作业终止。

要回答第二个问题,我会告诉你,不是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’命令以在前台恢复作业,依此类推。

次佳解决办法

您收到了消息,因为系统会警告您与当前shell关联的活动作业。

您可以通过运行以下命令列出这些运行/停止的作业:jobs

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

  • 将最后一份工作移到前台:fg

  • 运行disown从当前shell中删除这些作业而不杀死它们,

  • 通过按两次Ctrl+D来杀死这些任务强制注销,与键入exit /logout两次相同,

  • 通过运行来手动终止这些作业:kill $(jobs -p)(强制添加-9)

  • 如果你不认识它们,并且想要仍然杀死所有已停止的进程,请尝试:kill $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')


回答有关sudo问题,也不会要求您输入密码,因为它需要有活跃的终端,以接收来自standard input密码,并通过运行它的背景下,shell不会等待命令完成,所以你没有可能与命令交互。

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

  • 运行命令而不进入后台(&),

  • 通过sudo -S从标准输入而不是终端设备读取密码,例如

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

第三种解决办法

当您遇到停止的作业错误时:

  1. jobs型 – >您将看到处于停止状态的作业

  2. 然后键入exit – >你可以离开航站楼

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/3013.html,未经允许,请勿转载。