なぜ slay?
ポートを取り戻すために必要なすべて。
インタラクティブ TUI
キーボードナビゲーションでプロセスを検索、閲覧、複数選択。
slay -iキルアニメーション
プロセスが終了されるとき、ターミナルを弾丸が飛ぶのを見届けよう。
slay 3000グレースフルシャットダウン
まず SIGTERM、プロセスが終了を拒否した場合のみ SIGKILL にエスカレート。
slay -g 3000ウォッチモード
ポーリングを続け、ポートで復活するプロセスを自動キル。
slay -w 3000プロセスツリー
プロセスツリー全体を終了。子プロセスから先に、クリーンなティアダウン。
slay --tree 3000JSON 出力
NDJSON を jq にパイプして、スクリプティング、CI パイプライン、自動化に活用。
slay --json 3000スマートラベル
Node、Python、Docker、PostgreSQL、Vite など 20 以上を自動検出。
slay --all依存関係ゼロ
無駄なし。必要なものだけ。1秒以内にインストール完了。
npm i -g slay-portクロスプラットフォーム
macOS (lsof)、Linux (lsof)、Windows (netstat + taskkill) で動作。
works everywhere ✓プロファイルプリセット
ポートの組み合わせを名前付きプロファイルとして保存。
slay --profile devポート範囲
slay 8000-8010 でポート範囲を終了。
slay 8000-8010ポート情報
終了せずにポートを検査。PID、CPU、メモリを表示。
slay info 3000シェル補完
bash、zsh、fishでコマンド、フラグ、プロファイル名をタブ補完。
slay completions zsh名前でキル
正規表現対応でプロセス名を指定。一括キルから特定プロセスを除外可能。
slay --name "node.*"キル後フック
キル後に自動でコマンドを実行 — サーバー再起動、ビルド開始、チーム通知。
slay 3000 --then "npm start"ポート空き確認
ポートの空き状況を確認、次の利用可能なポートを検索。CIスクリプトや自動化に最適。
slay check 3000もう PID推測は不要
旧来の方法は面倒。slayなら1コマンド。
旧来の方法
bash
$ lsof -iTCP:3000 -sTCP:LISTEN
node 12847 user 23u IPv4 TCP *:3000
$ kill -9 12847
$ lsof -iTCP:3000 -sTCP:LISTEN
# still alive... try again?
$ kill -SIGKILL 12847
slayの方法
slay
$ slay 3000
3000 > node
PID 12847 (Dev Server)
killed PID 12847 on port 3000 [SIGKILL]
Done in 0.2s
始め ましょう
1つのコマンドですぐに使える。
クイックスタート
npx slay-port 3000 グローバルインストール
npm i -g slay-port && slay 3000 クイックスタート
pnpm dlx slay-port 3000 グローバルインストール
pnpm add -g slay-port && slay 3000 クイックスタート
yarn dlx slay-port 3000 グローバルインストール
yarn global add slay-port && slay 3000 クイックスタート
bunx slay-port 3000 グローバルインストール
bun add -g slay-port && slay 3000 クイックスタート
brew install hammadxcm/slay/slay-port グローバルインストール
brew install hammadxcm/slay/slay-port && slay 3000 クイックスタート
sudo snap install slay-it --classic グローバルインストール
sudo snap install slay-it --classic && slay 3000 クイックスタート
sudo apt install slay-port グローバルインストール
sudo apt install slay-port && slay 3000 クイックスタート
scoop bucket add slay https://github.com/hammadxcm/scoop-slay && scoop install slay グローバルインストール
scoop install slay && slay 3000 クイックスタート
winget install hammadxcm.slay-port グローバルインストール
winget install hammadxcm.slay-port && slay 3000 API の使い方
import { findByPort, killProcess } from 'slay-port' 実際の 動作を見る
15通りの終了方法。
Basic Kill
slay 3000
$ slay 3000
3000 > node PID 12847 (Dev Server)
* *
***
killed PID 12847 on port 3000 [SIGKILL]
Interactive Mode
slay -i
$ slay -i
> 3000 node PID 12847 Dev Server
8080 python PID 9321 HTTP Alt
5432 pg PID 4510 PostgreSQL
↑↓ navigate space select enter confirm
Watch Mode
slay 3000 -w
$ slay 3000 -w
watching port 3000...
killed PID 12847 [SIGKILL]
watching port 3000...
process respawned as PID 12901
killed PID 12901 [SIGKILL]
watching port 3000...
Force Kill
slay 3000 -f
$ slay 3000 -f
3000 > node PID 12847 (Dev Server)
*========================***
killed PID 12847 on port 3000 [SIGKILL]
no confirmation needed (-f)
Graceful Shutdown
slay 3000 --soft
$ slay 3000 --soft
3000 > node PID 12847 (Dev Server)
sending SIGTERM...
waiting for graceful exit (5s)...
process exited gracefully [SIGTERM]
Multi-port
slay 3000 8080 5432
$ slay 3000 8080 5432
3000 > node PID 12847 (Dev Server)
8080 > python PID 9321 (HTTP Alt)
5432 > pg PID 4510 (PostgreSQL)
killed 3 processes on 3 ports
Dry Run
slay 3000 -n
$ slay 3000 -n
3000 > node PID 12847 (Dev Server)
[dry run] would kill PID 12847
no processes were harmed
Process Tree
slay 3000 -t
$ slay 3000 -t
3000 > node PID 12847 (Dev Server)
└─ PID 12848 (worker)
└─ PID 12849 (worker)
killed tree: 12849, 12848, 12847
Kill by Name
slay --name "node.*"
$ slay --name "node.*" --exclude "vite"
PID 12847 node server.js (port 3000)
PID 13201 node worker.js (port 3001)
PID 14500 node vite.js (excluded)
killed 2 processes, 1 excluded
Post-Kill Hook
slay 3000 --then "npm start"
$ slay 3000 --then "npm start"
3000 > node PID 12847 (Dev Server)
killed PID 12847 on port 3000 [SIGKILL]
running hook: npm start
hook completed (exit 0)
Port Check
slay check 3000
$ slay check 3000
port 3000 is in use (node PID 12847)
$ slay check --next 3000
port 3002 is available
Init Config
slay init
$ slay init
✓ Created .slay.json with example profiles
Run Profile
slay --profile dev
$ slay --profile dev
3000 > node PID 12847 (Dev Server)
5173 > node PID 13201 (Vite)
5432 > pg PID 4510 (PostgreSQL)
killed 3 processes on 3 ports
Port Range
slay 8000-8005
$ slay 8000-8005
8000 > node PID 9001 (HTTP Alt)
8001 > node PID 9002 (HTTP Alt)
killed 2 processes on 2 ports (4 ports clear)
JSON Output
slay 3000 --json
$ slay 3000 --json
{"type":"found","pid":12847,"port":3000}
{"type":"killed","pid":12847,"signal":"SIGKILL"}
{"type":"summary","killed":1,"failed":0}
UDP Ports
slay 53 --udp
$ slay 53 --udp
53/udp > mDNSResponder PID 289
*========================***
killed PID 289 on port 53/udp [SIGKILL]
All Listeners
slay --all -y
$ slay --all -y
scanning all ports...
found 5 listening processes
killed 5/5 processes
0 failed
Verbose Mode
slay 3000 -v
$ slay 3000 -v
[tcp] 3000 > node PID 12847
[signal] sending SIGKILL to 12847
[timing] kill took 12ms
killed PID 12847 on port 3000 [SIGKILL]
プログラマティック API
Node.js プロジェクトで slay をライブラリとして使用。
エクスポート
-
findByPort(platform, port)Find processes on a specific port -
findByPorts(platform, ports)Find processes on multiple ports -
findAllListening(platform)Find all listening processes -
killProcess(platform, proc)Kill a single process -
killAll(platform, procs)Kill multiple processes -
enrichLabel(proc)Add smart labels to a process
api.ts
import { findByPort, killProcess, platform }
from 'slay-port';
const procs = await findByPort(platform, 3000);
for (const proc of procs) {
const result = await killProcess(platform, proc);
console.log( `Killed $${result.pid} on $${result.port}` );
}