代码之家  ›  专栏  ›  技术社区  ›  flybywire

linux:kill后台任务

  •  173
  • flybywire  · 技术社区  · 15 年前

    如何终止Linux中最后生成的后台任务?

    例子:

    doSomething
    doAnotherThing
    doB &
    doC
    doD
    #kill doB
    ????
    
    8 回复  |  直到 8 年前
        1
  •  208
  •   falstro    15 年前

    在bash中有一个特殊的变量:

    kill $!
    

    $!扩展到后台执行的最后一个进程的PID。

        2
  •  267
  •   John Kugelman Michael Hodel    15 年前

    你可以按工号杀人。当您将任务置于后台时,您将看到如下内容:

    $ ./script &
    [1] 35341
    

    [1] 是作业编号,可参照如下:

    $ kill %1
    $ kill %%  # Most recent background job
    

    要查看作业编号列表,请使用 jobs 命令。更多来自 man bash :

    在shell中有许多引用作业的方法。性格 % 引入作业名称。职位号 n 可能是 被称为 %n . 也可以使用用于启动作业的名称前缀或使用 出现在命令行中。例如, %ce 指停止 ce 工作。如果前缀与多个作业匹配,则bash 报告错误。使用 %?ce 另一方面,引用包含字符串的任何作业 总工程师 在命令行中。如果 子字符串匹配多个作业,bash报告错误。符号 %% %+ 引用shell对当前作业的概念,这是在前台或后台启动时停止的最后一个作业。上一个作业可能 使用引用 %- . 在与作业有关的输出中(例如,作业命令的输出),当前作业总是 标记为 + 和上一个作业 - . 单一的 % (没有附带的工作规范)也指 目前的工作。

        3
  •  41
  •   Dave Vogt    15 年前

    下面的命令给出了会话中所有后台进程的列表,以及PID。然后您可以使用它来终止进程。

    jobs -l
    

    示例用法:

    $ sleep 300 &
    $ jobs -l
    [1]+ 31139 Running                 sleep 300 &
    $ kill 31139
    
        4
  •  22
  •   royhowie    9 年前

    这将杀死所有后台进程:

    jobs -p | xargs kill -9
    
        5
  •  2
  •   royhowie    9 年前
    skill doB
    

    skill 是kill命令的一个版本,允许您根据给定条件选择一个或多个进程。

        6
  •  1
  •   jldupont    15 年前

    你需要它的PID…用“ps-a”找到它。

        7
  •  0
  •   qeatzy    8 年前

    这是一个主题外的答案,但对于那些感兴趣的人来说,这可能是有价值的。

    正如@john kugelman的答案所示,%与工作规范有关。 如何有效地找到它?使用less的&pattern命令 ,似乎man使用较少的寻呼机(不太确定),在man bash类型&%中,类型enter将只显示包含“%”的行,以重新显示所有行,类型&。然后进入。

        8
  •  -1
  •   zakk    15 年前

    只需使用killall命令:

    取消所有任务名称

    有关更多信息和更高级的选项,请键入“man killall”。