我怎样才能杀死所有停止的工作?

当我尝试退出Linux服务器时,我收到消息:

有停止的工作。

:有没有一个命令来杀死这些?

要快速杀死在bash下运行的所有作业,请input:

 kill `jobs -ps` 

jobs -ps列出停止的作业的进程ID。 kill `jobs -ps`发送TERM信号给所有停止的作业。

尝试input这个:

 kill -9 $(jobs -p) 

被接受的答案会杀死所有的工作(在这种情况下是足够的),而不仅仅是停止的工作。 如果你想杀死只有停止的,运行:

 kill $(jobs -l | grep Stopped | cut -d' ' -f3) 

最简单的方法实际上是立即重试退出; bash将采取这个意思是“杀死所有停止的工作和退出”。

 for x in `jobs -p` ; do kill -9 $x ; done 

如果你想删除一些停止的工作,但不是全部,试试这个:

首先,列出工作,你会得到这样的东西:

 $ jobs -l [2] 4813 Stopped ./parse < call.txt [3]- 4819 Stopped ./parse < call.txt 

发送杀死一个停止的工作,它会做什么,而不是队列,而不是在前台,它会终止

 $ fg %2 ./parse < call.txt Terminated $ jobs -l [3]- 4819 Stopped ./parse < call.txt 

以防万一这能帮助别人 – 大多数人都在这里,因为他们有一些停止的进程,他们开始,也许通过壳后台。 我需要find进程,作为根,由其他用户停止,在jobs命令变体不会做。

有一点与man ps得到了这个:

 ps -a -o pid,user,cmd,state | grep 'T$' 

说明: -a标志表示显示所有进程,然后是-o控制输出,将显示关于每个进程的信息。 我select了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 

所以最后我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 

通常如果你有这个消息,你需要注销两次。 例如,首先按Ctrl + D给你警告信息通知你停止的工作,第二次按下会注销你的工作。 这同样适用于logout和exit命令。

要手动杀死它们,试试: kill $(jobs -p) 。


如果您不想从当前shell中删除作业,则可以将其从活动作业表中删除,而不必使用disown命令进行查杀。 例如

 $ sleep 1000 & [1] 19404 $ jobs [1]+ Running sleep 1000 & $ disown 

停止的作业也可以通过进程的状态( T字符)来确定,这意味着进程被诸如SIGSTOP , SIGTSTP或其他SIGTTIN (如SIGTTIN或SIGTTOU )所SIGTTOU 。

如果jobs shell内置命令不可用,则停止的进程可以通过以下命令列出:

 ps wuax | awk '$8 ~ "T"' 

要杀死他们,你可以基本input:

 kill -9 $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}') 

这是一个简单的testing:

 $ 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