이전에 누군가가 질문했지만 OpenBSD를 사용하여 이 작업을 수행하는 방법은 무엇입니까? 나는 성공하지 못한 채 몇 가지 다른 접근 방식을 시도했습니다.
$ sudo fuser -k 80/tcp
fuser: 80/tcp: No such file or directory
$ kill $(sudo lsof -t -i:80)
sudo: lsof: command not found
usage: kill [-s signame | -signum | -signame] { job | pid | pgrp } ...
kill -l [exit_status ...]
$
답변1
lsof를 설치합니다(PKG_PATH는 OS 버전에 따라 다름).
$ su - root -c \
"PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/5.8/packages/amd64 pkg_add -r lsof"
lsof-4.88: ok
사용 fstat
:
# Start a process (nc) that listens on port 8080
$ nc -l 8080 & bg
[1] 17454
[1] nc -l 8080
# Get the process listening on port 8080:
$ fstat | grep :8080
cmihai nc 17454 3* internet stream tcp 0x0 *:8080
다음과 같이 pid를 가져오는 함수를 만들 수 있습니다.
$ portpid() { fstat | grep ":$1" | awk '{print $3}' ;}
$ portpid 8080
17454
그런 다음 다음과 같이 포트 8080에서 수신 대기 중인 프로세스를 종료할 수 있습니다.
$ kill $(portpid 8080)
[1] + Terminated nc -l 8080
부인 성명:
- 이 예제에는 오류 처리나 그 어떤 것도 없습니다. 여기에 나열된 예제 외에는 어떤 종류의 테스트도 수행하지 않습니다. 실수로 다른 프로세스가 종료되는 것을 방지하려면 직접 테스트하고 이 함수에 오류 처리를 추가하세요.