Tìm kiếm PID của quá trình sử dụng một cổng cụ thể?


392

Tôi đang cài đặt hadoop trên hệ thống Ubuntu của tôi. Khi tôi khởi động nó, nó báo cáo rằng cổng 9000 đang bận.

Tôi đã sử dụng:

netstat -nlp|grep 9000

để xem nếu một cổng như vậy tồn tại và tôi đã nhận được điều này:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Nhưng làm thế nào tôi có thể có được PID của quá trình đang giữ nó?




netstatlệnh có thể hoạt động trong nhiều hệ thống hoạt động để cho phép bạn có được điều đó, bạn chỉ cần tìm các đối số sẽ đảm bảo nó sẽ hiển thị các pid dọc theo mỗi cổng được mở.
Luciano

Câu trả lời:


474

Trên Linux, bạn phải root hoặc chủ sở hữu của quy trình để có được thông tin bạn mong muốn. Như vậy, đối với các quy trình đang chạy như một người dùng khác, việc trả trước sudolà hầu hết những gì bạn cần. Ngoài ra, trên các hệ thống Linux hiện đại, sslà công cụ được sử dụng để làm điều này:

$ sudo ss -lptn 'sport = :80'
State   Local Address:Port  Peer Address:Port              
LISTEN  127.0.0.1:80        *:*                users:(("nginx",pid=125004,fd=12))
LISTEN  ::1:80              :::*               users:(("nginx",pid=125004,fd=11))

Bạn cũng có thể sử dụng cùng một lời mời mà bạn hiện đang sử dụng, nhưng hãy nhớ sudo:

$ sudo netstat -nlp | grep :80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

Bạn cũng có thể sử dụng lsof:

$ sudo lsof -n -i :80 | grep LISTEN
nginx   125004 nginx    3u  IPv4   6645      0t0  TCP 0.0.0.0:80 (LISTEN)

36
Lưu ý: trong OSX, -ptùy chọn dành cho giao thức thay vì xử lý. Xem câu hỏi này
Bryan P

3
@BryanP OP đã yêu cầu Ubuntu vì vậy điều đó không liên quan ...
Adam B

43
@AdamB Trừ khi một người dùng Mac đến đây để tìm kiếmFinding the PID of the process using a specific port
mraaroncruz

2
Câu trả lời này có lẽ sẽ được cải thiện bằng cách đặt nhu cầu lên sudohàng đầu.
thuyền

2
@MrOnyancha Sử dụng các tùy chọn terse (-t) -lsof -ti tcp:80
Mohamel

138

Ngoài ra bạn có thể sử dụng lsoftiện ích. Cần phải root.

# lsof -i :25
COMMAND  PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
exim4   2799 Debian-exim    3u  IPv4   6645      0t0  TCP localhost:smtp (LISTEN)
exim4   2799 Debian-exim    4u  IPv6   6646      0t0  TCP localhost:smtp (LISTEN)

9
Lệnh này cũng sẽ cung cấp cho bạn các quy trình có establishedkết nối, không chỉ các quy trình listening.
Firelynx

1
Không nhất thiết phải là root. Và, đối với những người muốn chỉ nhận được PID, bạn có thể lsof -i :25 -Fptạo ra đầu ra như thế nào p1234.
Robert

12

Tôi đang sử dụng "CentOS 7 Minimal" cũng netstatkhông có lsof. Nhưng rất nhiều bản phân phối linux có lệnh thống kê socket (tức là ss).

Dưới đây là một ví dụ về thực thi:

# ss -tanp | grep 6379
LISTEN   0    128  127.0.0.1:6379   *:*   users:(("redis-server",pid=2531,fd=4))

1
Xem thêmss -pntl 'sport = :6379'
Stéphane Chazelas

10

Chạy lệnh với sudosẽ cung cấp cho bạn PID. Trên máy phát triển của tôi, tôi nhận được:

$ netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      -

$ sudo netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      16449/java

Và như đã đề cập trong các câu trả lời khác, bạn cũng có thể sử dụng sscác lsoflệnh hoặc .


lệnh chạy dưới dạng sudoID tiến trình hiển thị
Eugen Konkov

Nhưng nếu sudo netstat -nlp | grep 34157vẫn hiển thị -thay vì PID thì sao?
Eugen Konkov

8

Ngoài ra, bạn có thể sử dụng fuser:

fuser -v -n tcp 22

Đầu ra :

                     USER        PID ACCESS COMMAND
22/tcp:              root        598 F.... sshd

Nó không hoạt động fuser -v -n tcp 80 , ngay cả khi tôi thử với sudo
SuperKrish

1
Lưu ý: Điều này đòi hỏi sudonếu quá trình vi phạm cũng được bắt đầu vớisudo
laggingreflex

1
Đây là một điều tốt để nhớ nói chung. Các lệnh trong Linux thường sẽ không cung cấp thông tin về các quy trình được bắt đầu bằng root / sudo trừ khi lệnh được chạy với Sudo. Điều này đúng ngay cả khi lệnh thường không cần sudo để chạy chính xác.
njfife
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.