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

当我尝试退出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了pidusercmd (命令行)和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给你警告信息通知你停止的工作,第二次按下会注销你的工作。 这同样适用于logoutexit命令。

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


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

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

停止的作业也可以通过进程的状态( T字符)来确定,这意味着进程被诸如SIGSTOPSIGTSTP或其他SIGTTIN (如SIGTTINSIGTTOU )所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