다음보다 더 간결한 형태의 백그라운드 작업 종료가 있습니까?
for i in {1..5}; do kill %$i; done
또한 {1..5}에는 분명히 하드코딩된 매직 넘버가 있습니다. 다음을 수행하지 않고 어떻게 "N"으로 만들 수 있습니까? 여기서 N은 올바른 숫자입니다.
$(jobs | wc -l)
실제로 관리되는 작업 수를 얻기 위해 PS1에서 \j를 사용하고 있습니다. 이것이 동일합니까?
답변1
kill
다음에서 관리하는 모든 백그라운드 bash
작업 의 경우
kill $(jobs -p)
와 가 모두 내장되어 있으므로 오류가 발생 하지 않아야 jobs
합니다 .kill
bash
매개변수 목록이 너무 깁니다.유형.
답변2
비어 있으면 kill 명령이 실패하므로 하위 명령 xargs
대신 사용하십시오 .$(jobs -p)
jobs -p
jobs -p | xargs kill
답변3
나는 출력에 따라 jobs -p
솔루션이 약간 다를 수 있다고 생각합니다. 나로서는
$ jobs -p
[1] - 96029 running some job
[2] + 96111 running some other job
따라서 그렇게 해도 아무런 이점이 없습니다.
$ jobs -p | xargs kill
kill: illegal process id: [1]
반면에 실행은 kill $(jobs -p)
작동하지만 PID가 아닌 문자열도 kill
.
따라서 내 해결책은 다음과 같이 grep
PID를 먼저 가져온 다음 사용하는 것입니다.xargs
$ jobs -p | grep -o -E '\s\d+\s' | xargs kill
답변4
나는 작업을 종료하기 전에 작업이 존재하는지 확인하는 것을 선호합니다. 이렇게 하면 아무것도 실행되지 않아도 스크립트가 실패하지 않습니다.
타이핑도 짧아집니다. 이것을 당신의 것에 던져라 .bash_profile
:
function killjobs () {
JOBS="$(jobs -p)";
if [ -n "${JOBS}" ]; then;
kill -KILL ${JOBS};
fi
}
그런 다음 다음을 실행하십시오.
killjobs
실행 중인 작업을 모두 종료합니다.