~에서https://unix.stackexchange.com/a/43709/674
다음에서
kill
관리하는 모든 백그라운드 작업 의 경우bash
kill $(jobs -p)
kill $(jobs -p)
현재 셸에서 "실행 중인" 백그라운드 작업만 종료하고 "중지"되었거나 셸에서 다른 작업은 종료하지 않겠습니까 ?
현재 셸에서 실행 중이든 중지되었거나 다른 방식으로든 모든 백그라운드 작업을 어떻게 종료합니까?
예를 들어 다음을 실행하여 less
두 개의 중지된 작업을 만들었습니다 ctrl+z
.
$ ps | less
[1]+ Stopped ps | less
$ less recover_jobs.sh
[2]+ Stopped less recover_jobs.sh
$ jobs -l
[1]- 2753 Done ps
2754 Stopped | less
[2]+ 2842 Stopped less recover_jobs.sh
$ jobs -p
2753
2842
$ kill $(jobs -p)
bash: kill: (2753) - No such process
$ kill 2754
$ kill 2842
$ jobs -l
[1]- 2753 Done ps
2754 Stopped | less
[2]+ 2842 Stopped less recover_jobs.sh
$ fg 1
ps | less
Terminated
$ fg 2
less recover_jobs.sh
Terminated
이유를 알고 싶습니다.
kill $(jobs -p)
stopped
어떤 일자리 도 죽이지 않을 것입니다 .jobs -p
중지된 작업의 pid 2754를 표시하는 대신| less
완료된 작업의 pid 2753을 표시합니다ps
.kill 2754
kill 2842
종료하지 않고 작동| less
을 멈췄습니다less recover_jobs.sh
.- 작업을 중단 하면
fg
즉시 표시되지만Terminated
내 앞에 표시되지는 않습니까fg
?
감사해요.
답변1
kill $( jobs -p )
TERM
모두에게 신호를 보낼 거야일하다, 실행 여부에 관계없이. 작업에는 여러 프로세스가 포함될 수 있지만 각 작업의 첫 번째 프로세스만 신호를 받습니다(아래 참조).
첫 번째, 세 번째, 마지막 질문에 대한 답변은 동일합니다. 중지된 작업은 수행되지 않습니다.받다어떤 신호라도. 신호 처리기(기본 처리기 포함)는 프로세스에서 실행되며 프로세스는 다음과 같습니다.중지됨. 신호는출판하다작업이 재개되면.
두 번째 질문은 jobs -p
프로세스의 프로세스 ID만 제공할 것이라고 생각합니다.첫 번째jobs -l
모든 작업에 속한 모든 프로세스가 나열 되는 동안 파이프라인의 프로세스가 나열됩니다. 파이프를 종료하는 첫 번째 프로세스는 다음 프로세스가 읽고 있는 파일 설명자를 닫으므로 다음에 읽기를 시도할 때 파일 끝을 알립니다.