Linux 서버를 종료하려고하면 다음 메시지가 표시됩니다.
중지 된 작업이 있습니다.
: 이것들을 죽이는 하나의 명령이 있습니까?
shopt -s checkjobs
내 .bashrc 를 넣어 했습니다
Linux 서버를 종료하려고하면 다음 메시지가 표시됩니다.
중지 된 작업이 있습니다.
: 이것들을 죽이는 하나의 명령이 있습니까?
shopt -s checkjobs
내 .bashrc 를 넣어 했습니다
답변:
bash에서 중지 된 모든 작업을 빠르게 종료하려면 다음을 입력하십시오.
kill -9 `jobs -ps`
jobs -ps
-p
중지 된 ( -s
) 작업 의 프로세스 ID ( )를 나열합니다 .
kill -9 `jobs -ps`
모든 SIGKILL 신호를 보냅니다.
sudo kill `jobs -p`
작동하지 않았지만 명시 적으로 PID를 입력했습니다.
kill
와 같이 프로세스가 중지되므로 기본적으로 전송되는 SIGTERM (-15)을 처리하지 않습니다.
이것을 입력하십시오 :
kill -9 $(jobs -p)
가장 쉬운 방법은 실제로 즉시 즉시 출구를 재 시도하는 것입니다. bash
"중지 된 모든 작업 종료 및 종료"를 의미합니다.
이 방법은 다른 사람에게 도움이 될 수 있습니다. 대부분의 사람들은 쉘을 통해 백그라운드에서 시작된 프로세스를 중지했기 때문에 여기에 있습니다. 다른 사용자가 프로세스를 루트로 중지하여 jobs
명령의 변형 이 수행하지 않는 프로세스를 찾아야했습니다 .
약간의 파고 들어 와서이 문제를 해결 man ps
했습니다.
ps -a -o pid,user,cmd,state | grep 'T$'
설명 : -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
마지막으로 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
jobs -ps
이 답변보다 간단합니다. 즉,이 답변에는 Ctrl-Z
쉘에서 중지 된 작업 만 표시되는 것이 아니라 모든 중지 된 작업 : 다른 쉘, 디버깅중인 작업을 포함하여 다른 사용자 (예 : gdb).
ps -el | grep T
'T'상태의 프로세스를 찾는 데 사용해야 했습니다.
일부 중지 된 작업을 제거하고 일부만 제거하려면 다음을 시도하십시오.
먼저 작업을 나열하면 다음과 같은 결과가 나타납니다.
$ jobs -l
[2] 4813 Stopped ./parse < call.txt
[3]- 4819 Stopped ./parse < call.txt
중지 된 작업에 kill을 보내면 포 그라운드로 가져 오는 것 외에는 아무것도 수행하지 않고 종료됩니다.
$ fg %2
./parse < call.txt
Terminated
$ jobs -l
[3]- 4819 Stopped ./parse < call.txt
일반적으로 해당 메시지가 표시되면 두 번 로그 아웃해야합니다. 예를 들어 먼저 Ctrl+D중지 된 작업에 대한 경고 메시지를 표시하고 두 번째를 누르면 작업 종료를 로그 아웃합니다. 이 명령 logout
과 exit
명령 에도 동일하게 적용됩니다 .
수동으로 종료하려면 다음을 시도하십시오 kill $(jobs -p)
..
현재 쉘에서 작업을 종료하지 않으려면 disown
명령 을 사용하여 종료하지 않고 활성 작업 테이블에서 작업을 제거 할 수 있습니다 . 예 :
$ sleep 1000 &
[1] 19404
$ jobs
[1]+ Running sleep 1000 &
$ disown
중지 된 작업은 프로세스 상태 ( T
문자)에 의해 결정될 수도 있습니다. 이는 프로세스가 SIGSTOP
, SIGTSTP
또는 기타 (예 SIGTTIN
: 또는 SIGTTOU
) 와 같은 신호에 의해 중지되었음을 의미합니다 .
경우 jobs
쉘 내부 명령을 사용할 수없는 프로세스는 다음 명령으로 나열 할 수 있습니다 중지 :
ps wuax | awk '$8 ~ "T"'
그들을 모두 죽이려면 기본적으로 다음을 입력하십시오.
kill -9 $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')
간단한 테스트는 다음과 같습니다.
$ 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