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

Nul*_*ter 76 emacs process job-control

我多次遇到这种情况。

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

sudo emacs tet.c &

Ubuntuemacs没有询问我的密码,而是在没有任何emacs窗口或终端上的任何输出(pid 除外)的情况下启动进程,查看图像(如果我不使用“&”,那么它会询问我的密码):

在此处输入图片说明

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

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

  2. 为什么 Ubuntu/emacs 会这样?为什么它不问我密码?

Rad*_*anu 93

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:
Run Code Online (Sandbox Code Playgroud)

在此之后,如果需要,您可以键入Ctrl+Z以将作业再次置于后台。然后你可以再次运行'fg'命令将工作带回前台等等。


ken*_*orb 24

您收到该消息,因为系统会警告您有关与当前 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
    
    Run Code Online (Sandbox Code Playgroud)
  • 通过以下方式将 sudo 配置为不要求输入密码:visudo命令和编辑sudoers文件。请参阅:为用户启用NOPASSWD


小智 9

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

  1. 输入jobs--> 您将看到处于停止状态的作业
  2. 然后输入exit--> 你可以离开终端