.NET Framework에 지정된 특정 포트를 사용하여 모든 프로세스를 종료해야 하는 bash 함수를 만들려고 합니다 port_array
. kill-port
예를 들어 포트를 사용하여 함수를 직접 호출하면 kill-port "80";
for 루프 내에서 호출하면 이상한 오류가 발생합니다 kill
.
Usage:
kill [options] <pid> [...]
Options:
<pid> [...] send signal to every <pid> listed
-<signal>, -s, --signal <signal>
specify the <signal> to be sent
-l, --list=[<signal>] list all signal names, or convert one to a name
-L, --table list all signal names in a nice table
-h, --help display this help and exit
-V, --version output version information and exit
For more details see kill(1).
코드는 다음과 같습니다.
#!/bin/bash
port_array=( 5057 5061 5056 );
function kill-ports () {
ports=( "$@" )
for i in "${ports[@]}";
do
kill-port $i;
done
};
function kill-port () {
lsof -i tcp:"$1" | awk 'NR!=1 {print $2}' | xargs kill;
}
kill-ports "${port_array[@]}";
아마도 내 실수를 감독하고 있을 것입니다. 그러나 여기서 문제가 무엇인지 말해 줄 수 있는 사람이 있다면 감사하겠습니다.
인사,
실라
답변1
kill-ports() {
for port in "$@"; do fuser -n tcp "$port" -k -TERM; done
}
(이 경우에는 반드시 인용문이 필요하지 않지만 항상 인용문을 사용하는 것이 좋습니다. 그렇지 않으면 사람들로부터 불만/수정 사항을 받게 됩니다.)
답변2
@StéphaneChazelas의 의견 덕분에 해결책이 있습니다.
"그냥 해:
lsof -ti "tcp:$1" | xargs -r kill
,
그게 -t
목적이에요 (그리고 -r
말해요매개변수매개변수가 없으면 명령이 실행되지 않습니다. 그건암소 비슷한 일종의 영양xargs. 다음과 같은 다른 구현FreeBSD이 작업은 자동으로 수행됩니다)"
결국 이런 모습이 된다반품작동합니다(청소도 좀 했습니다):
#!/bin/bash
port_array=( 5057 5061 5056 );
kill-ports() {
for port in "$@";
do
kill-port "$port";
done
};
kill-port () {
lsof -ti "tcp:$1" | xargs -r kill;
}
kill-ports ${port_array[@]};
편집하다:
@PSkocik의 솔루션은 @StéphaneChazelas의 의견 다음에 게시되었지만 잘 작동합니다.
#!/bin/bash
port_array=( 5057 5061 5056 );
kill-ports() {
for port in "$@"; do fuser -n tcp "$port" -k -TERM; done
}
kill-ports ${port_array[@]};
답변3
죽이려면 -9를 추가해 보세요.
lsof -i tcp:"$1" | awk 'NR!=1 {print $2}' | xargs kill -9;