当我尝试退出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