oos*_*hro 97
要在 bash 下快速终止所有停止的作业,请输入:
kill -9 `jobs -ps`
Run Code Online (Sandbox Code Playgroud)
jobs -ps列出已-p停止 ( -s) 作业的进程 ID ( ) 。
kill -9 `jobs -ps`向所有这些发送 SIGKILL 信号。
duk*_*vin 88
尝试输入:
kill -9 $(jobs -p)
Run Code Online (Sandbox Code Playgroud)
Kit*_*nde 17
接受的答案将杀死所有工作(在这种情况下就足够了)而不仅仅是停止的工作。如果您只想杀死已停止的,请运行:
kill $(jobs -l | grep Stopped | cut -d' ' -f3)
Run Code Online (Sandbox Code Playgroud)
小智 7
for x in `jobs -p` ; do kill -9 $x ; done
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您想删除一些已停止的作业但不是全部,请尝试以下操作:
首先,列出职位,你会得到这样的信息:
$ jobs -l
[2] 4813 Stopped ./parse < call.txt
[3]- 4819 Stopped ./parse < call.txt
Run Code Online (Sandbox Code Playgroud)
将kill发送到已停止的作业,除了将其放入前台之外,它不会执行任何操作,它将终止
$ fg %2
./parse < call.txt
Terminated
$ jobs -l
[3]- 4819 Stopped ./parse < call.txt
Run Code Online (Sandbox Code Playgroud)
通常,如果您收到该消息,则需要注销两次。例如,第一次Ctrl+D给你警告信息,通知你有关停止的作业,第二次按下将使你注销,杀死作业。这同样适用于logout和exit命令。
要手动杀了他们,试试:kill $(jobs -p)。
如果您不想从当前的 shell 中杀死作业,可以使用disown命令将它们从活动作业表中删除,而无需杀死它们。例如
$ sleep 1000 &
[1] 19404
$ jobs
[1]+ Running sleep 1000 &
$ disown
Run Code Online (Sandbox Code Playgroud)
停止的作业也可以由进程的状态(T字符)确定,这意味着进程被诸如SIGSTOP、SIGTSTP或其他(如SIGTTIN、 或SIGTTOU)之类的信号停止。
如果jobsshell 内置命令不可用,可以通过以下命令列出已停止的进程:
ps wuax | awk '$8 ~ "T"'
Run Code Online (Sandbox Code Playgroud)
要全部杀死它们,您基本上可以键入:
kill -9 $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')
Run Code Online (Sandbox Code Playgroud)
这是一个简单的测试:
$ sleep 1000 &
[1] 2014
$ sleep 1000 &
[2] 2015
$ sleep 1000 &
[3] 2016
$ sleep 1000 &
[4] 2017
$ killall -STOP sleep
[1] Stopped sleep 1000
[2] Stopped sleep 1000
[3] Stopped sleep 1000
[4] Stopped sleep 1000
$ ps wuax | awk '$8 ~ "T"'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
vagrant 2014 0.0 0.0 7228 832 pts/0 T 20:38 0:00 sleep 1000
vagrant 2015 0.0 0.0 7228 708 pts/0 T 20:38 0:00 sleep 1000
vagrant 2016 0.0 0.0 7228 760 pts/0 T 20:38 0:00 sleep 1000
vagrant 2017 0.0 0.0 7228 828 pts/0 T 20:38 0:00 sleep 1000
$ kill -9 $(awk 'NR>1 && $8 ~ "T" {print $2}' <(ps wuax))
$ jobs
[1] Killed sleep 1000
[2] Killed sleep 1000
[3] Killed sleep 1000
[4] Killed sleep 1000
Run Code Online (Sandbox Code Playgroud)
以防万一这对其他人有帮助 - 大多数人在这里是因为他们有一些他们启动的停止进程,也许通过 shell 后台运行。我需要以 root 身份查找被其他用户停止的进程,对于该jobs命令的变体不会这样做。
一些挖掘man ps让我得到了这个:
ps -a -o pid,user,cmd,state | grep 'T$'
Run Code Online (Sandbox Code Playgroud)
说明:-a标志表示显示所有进程,然后-o控制输出,每个进程将显示什么信息。我选择pid, user, cmd(命令行)和state,这是进程状态。
来自man ps:
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the
state of a process:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
Run Code Online (Sandbox Code Playgroud)
所以最后我把它传送到上面grep T$说,给我显示最后一列中有 T 的所有进程。
然后我有一个很好的列表,列出了处于停止状态的不同用户的所有进程。
$ ps -a -o pid,user,cmd,state | grep 'T$'
865 joson74+ python T
885 joson74+ sh -c less T
886 joson74+ less T
1014 minames+ python3.4 -i /home/minames T
5352 MooKo nano stdio.h T
7851 harry tmux attach T
12083 harry tmux attach T
13495 gorylla+ python3.4 -i /home/gorylla1 T
18009 conr1d vim T
19664 enythin+ python T
24906 wardlist python T
Run Code Online (Sandbox Code Playgroud)