2016-06-01 1 views
0

깨끗하게 닫히지 않는 불량 레일 서버 프로세스를 제거 할 수 있도록 내 bash 프로파일에 별명을 썼습니다. 이 별칭은 잘 작동합니다.쉘 함수에서 lsof에 포트 번호 전달

alias kill3000="lsof -i tcp: 3000 -t | xargs kill -9 | echo 'killed processes on port 3000'" 

다른 포트에서 작동하는 프레임 워크의 경우보다 일반적인 용도로 만들고 싶습니다. 유사한 함수를 만들려고 했으므로 포트 번호를 변수로 전달할 수는 있지만 오류가 발생합니다. 나는 "killproc 3000"를 실행할 때 내가 쓴 기능은 나는 다음과 같은 오류 얻을, 그러나 ...이 같은

function killproc(){ 
    "lsof -i tcp:$1 -t | xargs kill -9 | echo 'killed processes on port $1'" 
} 

을 찾습니다, 내가 문제를 이해하는 데 어려움을 겪고있어

lsof: unacceptable port specification in: -i tcp: 

를 I 어떤 도움을 주셔서 감사합니다.

+1

''lsof -i ... 죽였어. ''''의심스러운 것 같습니다. 또한 상황을 디버깅하려면'set -vx; ... cmd ....; set + vx'를 사용하여 쉘이 코드를 해석하는 방법을 확인하십시오. '+'로 시작하는 줄은 모든 변수 값을 제자리에 표시합니다. ''dbl-quoted 문자열은 모두 '' '단일 인용 문자열로 "표준화"되어 있습니다. 행운을 빌어 요. – shellter

+0

'set -vx'는 문제를 찾는 데 매우 도움이되었습니다. 변수가 반복되어서 찾고있었습니다. 3000 3000 포트에 대한 오류가 발생했습니다. 왜 그 일이 일어 났는지 정확히 모르겠지만'exec bash '를 실행하면 문제가 해결되었습니다. 도움을 주셔서 감사합니다. –

답변

1

아마도 큰 따옴표가 관련되어있을 수 있습니다. 포트가 pspecified에서 수신을 찾을 수 없습니다 이상의 프로세스가있는 경우

function killproc(){ 
    lsof -i tcp:"$1" -t | xargs kill -9 
    lsof -i tcp:"$1" -t 2>/dev/null >/dev/null || printf "killed processes on port %s\n" "$1" 
} 

메시지 만 인쇄 :

이에 사용 해보세요.

몇 가지 문제가 발생하면 @shellter 명령을 따르십시오. set -vx ; killproc 300 ; set +vx으로 테스트를 실행하고 질문을 편집하여 생성 된 출력을 추가하십시오.

+0

감사합니다. 답변 (및 @ shellter의 의견) 제가 변수를 알아내는 데 도움이되었습니다. 변수가 중복되어 3000이라는 값이 3000 3000이되었습니다. 이유는 모르지만'exec bash '로 환경을 새로 고침하면 문제가 해결됩니다. –