以前に誰かが質問しましたが、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
婦人声明:
- この例にはエラー処理や何もありません。ここにリストされている例以外は、どのようなテストも実行しません。誤って他のプロセスが終了しないようにするには、直接テストしてこの関数にエラー処理を追加してください。