终止每个后台进程

use*_*888 10 shell kill background-process

我有几个Stopped后台进程。

kill $(jobs -p)并且kill `jobs -p`没有效果

kill %1, kill %2, 等成功终止个别进程

如何使用一个命令杀死每个后台进程?

另外,为什么前两个命令对我不起作用?

我正在运行 Linux Mint 15、64 位

slm*_*slm 10

当他们跑

好像你可以做到这一点与kill和输出jobs -p

例子

$ sleep 1000 &
[1] 21952
$ sleep 1000 &
[2] 21956
$ sleep 1000 &
[3] 21960
Run Code Online (Sandbox Code Playgroud)

现在我有 3 个假作业在运行。

$ jobs
[1]   Running                 sleep 1000 &
[2]-  Running                 sleep 1000 &
[3]+  Running                 sleep 1000 &
Run Code Online (Sandbox Code Playgroud)

像这样杀死他们:

$ kill $(jobs -p)
[1]   Terminated              sleep 1000
[2]-  Terminated              sleep 1000
[3]+  Terminated              sleep 1000
Run Code Online (Sandbox Code Playgroud)

确认他们都走了。

$ jobs
$
Run Code Online (Sandbox Code Playgroud)

当他们停下来

如果您的作业已停止,而不是运行,则改为执行此操作。

例子

$ kill $(jobs -p)

$ jobs
[1]+  Stopped                 sleep 1000
[2]-  Stopped                 sleep 1000
[3]   Stopped                 sleep 1000
Run Code Online (Sandbox Code Playgroud)

好的,所以没有杀死它们,但那是因为进程本身无法处理终止信号,它已停止。因此,请告诉操作系统进行查杀。这就是 a-9的用途。

$ kill -9 $(jobs -p)
[1]+  Killed                  sleep 1000
[2]-  Killed                  sleep 1000
[3]   Killed                  sleep 1000
Run Code Online (Sandbox Code Playgroud)

这样更好。

$ jobs
$ 
Run Code Online (Sandbox Code Playgroud)

当一些正在运行,一些停止时

如果您有一个混合的进程,其中一些已停止,一些正在运行,您可以先执行kill一个kill -9.

$ kill $(jobs -p); sleep <time>; \
    kill -18 $(jobs -p); sleep <time>; kill -9 $(jobs -p)
Run Code Online (Sandbox Code Playgroud)

如果您需要更多时间以允许进程先停止自己,请稍微延长时间。

信号

HUP (-1) 或 SIGTERM (-15) 都不会成功。但为什么?那是因为这些信号更友好,因为它们告诉应用程序自行终止。但由于应用程序处于停止状态,它无法处理这些信号。所以你唯一的办法就是使用 SIGKILL (-9)。

你可以看到所有这些信号kill与提供kill -l

$ kill -l | column -t
1)   SIGHUP       2)   SIGINT       3)   SIGQUIT      4)   SIGILL       5)   SIGTRAP
6)   SIGABRT      7)   SIGBUS       8)   SIGFPE       9)   SIGKILL      10)  SIGUSR1
11)  SIGSEGV      12)  SIGUSR2      13)  SIGPIPE      14)  SIGALRM      15)  SIGTERM
16)  SIGSTKFLT    17)  SIGCHLD      18)  SIGCONT      19)  SIGSTOP      20)  SIGTSTP
21)  SIGTTIN      22)  SIGTTOU      23)  SIGURG       24)  SIGXCPU      25)  SIGXFSZ
26)  SIGVTALRM    27)  SIGPROF      28)  SIGWINCH     29)  SIGIO        30)  SIGPWR
31)  SIGSYS       34)  SIGRTMIN     35)  SIGRTMIN+1   36)  SIGRTMIN+2   37)  SIGRTMIN+3
38)  SIGRTMIN+4   39)  SIGRTMIN+5   40)  SIGRTMIN+6   41)  SIGRTMIN+7   42)  SIGRTMIN+8
43)  SIGRTMIN+9   44)  SIGRTMIN+10  45)  SIGRTMIN+11  46)  SIGRTMIN+12  47)  SIGRTMIN+13
48)  SIGRTMIN+14  49)  SIGRTMIN+15  50)  SIGRTMAX-14  51)  SIGRTMAX-13  52)  SIGRTMAX-12
53)  SIGRTMAX-11  54)  SIGRTMAX-10  55)  SIGRTMAX-9   56)  SIGRTMAX-8   57)  SIGRTMAX-7
58)  SIGRTMAX-6   59)  SIGRTMAX-5   60)  SIGRTMAX-4   61)  SIGRTMAX-3   62)  SIGRTMAX-2
63)  SIGRTMAX-1   64)  SIGRTMAX
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多有关各种信号的信息,我强烈建议您查看信号手册页man 7 signal