Jika server pengembangan lokal menyatakan bahwa sebuah port sedang digunakan, gunakan perintah bawaan macOS lsof untuk menemukan proses yang mendengarkan di port TCP tersebut. Di Terminal, jalankan lsof dengan nomor port dan filter status mendengarkan (listening), lalu gunakan PID yang dilaporkan untuk memeriksa proses tersebut sebelum memutuskan apakah akan menghentikannya.
Menemukan proses yang mendengarkan di port TCP
Buka Terminal dan ganti 3000 dengan port dari pesan kesalahan. Masukkan perintah seperti yang ditunjukkan; nomor tersebut berupa teks biasa, sehingga tidak memerlukan karakter escape shell.
lsof -nP -iTCP:3000 -sTCP:LISTEN
lsof mencantumkan berkas yang dibuka oleh proses, termasuk soket Internet. Di sini, -iTCP:3000 memilih koneksi TCP untuk port tersebut, dan -sTCP:LISTEN mempersempit hasil hanya ke soket yang sedang menunggu koneksi. -nP menginstruksikan lsof untuk menampilkan alamat numerik dan nomor port alih-alih me-resolve nama, sehingga hasilnya lebih mudah dibandingkan dengan port yang Anda cari. Opsi-opsi ini didokumentasikan dalam manual lsof macOS sumber terbuka milik Apple. Panduan lsof macOS Apple
Hasilnya mungkin terlihat seperti ini; nama dan angka hanya sebagai ilustrasi, bukan laporan dari Mac tertentu:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 8421 sam 21u IPv6 ... 0t0 TCP *:3000 (LISTEN)
Baca COMMAND sebagai nama proses dan PID sebagai ID prosesnya. Kolom NAME menunjukkan alamat lokal dan port. *:3000 menunjukkan alamat wildcard, sedangkan localhost:3000 atau alamat loopback numerik menunjukkan pengikatan loopback. Listener wildcard dapat menerima koneksi yang ditujukan ke beberapa antarmuka lokal; hal ini tidak serta-merta menandakan bahwa layanan tersebut dapat diakses dari internet. Filter listening sangat berguna karena suatu proses juga dapat memiliki koneksi klien biasa yang melibatkan port yang sama.
Memeriksa pemilik PID tersebut
Gunakan PID dari output untuk meminta detail lebih lanjut dari daftar proses macOS. Ganti 8421 dengan PID yang Anda temukan:
ps -p 8421 -o pid=,ppid=,user=,command=
Ini akan menampilkan ID proses, ID proses induk, nama akun, dan baris perintah. Baris perintah dapat membantu mengidentifikasi apakah listener tersebut milik server pengembangan, runtime, atau aplikasi lain. Nilai COMMAND yang singkat di lsof tidak selalu cukup untuk mengidentifikasi proyek atau aplikasi yang meluncurkannya, jadi bandingkan output ps yang lebih lengkap dengan tab Terminal atau aplikasi yang Anda perkirakan menjalankan server tersebut.
Jika lsof tidak menampilkan baris apa pun, periksa kembali apakah nomor port sudah benar dan aplikasinya masih berjalan. Server mungkin telah keluar, menggunakan UDP alih-alih TCP, atau belum membuka soket listening-nya. Untuk memeriksa soket UDP pada port tersebut, jalankan:
lsof -nP -iUDP:3000
UDP tidak menggunakan status LISTEN milik TCP, jadi jangan tambahkan -sTCP:LISTEN ke kueri ini. Jika ada hasil yang muncul, gunakan COMMAND dan PID sebagai petunjuk, lalu periksa PID tersebut dengan ps seperti di atas.
Jika perintah tidak menampilkan hasil atau muncul kesalahan izin akses
Proses yang berjalan di bawah akun pengguna lain mungkin tidak terlihat oleh pengguna Anda saat ini. Jika Anda mendapatkan pesan terkait izin akses atau mencurigai pengguna lain memiliki soket tersebut, jalankan kembali kueri TCP dengan hak istimewa administrator:
sudo lsof -nP -iTCP:3000 -sTCP:LISTEN
Terminal akan meminta kata sandi akun Mac Anda. Saat Anda mengetikkannya, karakter biasanya tidak akan muncul; tekan Return jika sudah selesai. Gunakan akses administrator untuk memeriksa hasilnya, lalu kenali aplikasi pemiliknya sebelum mengambil tindakan. Jika perintah masih tidak menampilkan apa pun, coba lagi saat konflik port sedang terjadi: status proses dapat berubah antara saat error terjadi dan saat pencarian dilakukan.
Hentikan aplikasi yang tepat
Menemukan PID mengidentifikasi sebuah proses; ini tidak memberi tahu Anda apakah aman untuk menghentikannya. Jika Anda mengenali pemiliknya, hentikan server menggunakan aplikasi atau sesi Terminal yang memulainya, lalu coba lagi perintah awal Anda. Cara ini memberi aplikasi kesempatan untuk dimatikan secara normal. Jika Anda tidak tahu apa yang meluncurkan proses tersebut, selidiki baris perintah atau PID induk terlebih dahulu daripada langsung mematikan proses sistem atau latar belakang yang tidak dikenal. lsof melaporkan kepemilikan soket saat ini; ini tidak menjelaskan mengapa sebuah aplikasi dimulai atau konfigurasi proyek mana yang memilih port tersebut.
Untuk detail perintah pada versi macOS yang Anda gunakan, Terminal dapat menampilkan manual lokalnya dengan man lsof; tekan q untuk keluar. Panduan Terminal Apple menjelaskan penggunaan man untuk melihat dokumentasi perintah. Mulai menggunakan Terminal di Mac
Sumber
Halaman manual lsof macOS — Apple Open Source
Mulai menggunakan Terminal di Mac — Dukungan Apple