Tôi đang chạy một chương trình trong thiết bị đầu cuối mà tôi không thể trốn thoát Ctrl- Cvà tôi muốn giết. Làm thế nào tôi có thể tìm thấy PID của nó?
Tôi đang chạy một chương trình trong thiết bị đầu cuối mà tôi không thể trốn thoát Ctrl- Cvà tôi muốn giết. Làm thế nào tôi có thể tìm thấy PID của nó?
Câu trả lời:
Mở một thiết bị đầu cuối khác và chạy ps ax | grep foo
trong đó foo là tên của chương trình không phản hồi. Điều này sẽ trả về một dòng đầu ra trông giống như thế này:
$ ps ax | grep firefox
2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2 S+ 0:00 grep --color=auto firefox
Trường đầu tiên của mỗi dòng đầu ra là một số đại diện cho ID tiến trình của chương trình khớp với grep
(bạn có thể bỏ qua cái cuối cùng, đại diện cho grep
chính nó.
Để tạm dừng quá trình vi phạm, hãy làm:
kill pid
trong đó pid là ID tiến trình của chương trình. Bạn có thể phải sử dụng phán đoán của mình về việc trận đấu nào cần phải được chỉnh sửa kill
hoặc top
thay vào đó bạn có thể sử dụng . Việc sử dụng kill
chính nó sẽ gửi SIGTERM, trước tiên bạn nên thử vì nó cho phép chương trình tự dọn sạch đúng cách. Nếu SIGTERM thất bại, hãy thử SIGHUP, đó là thuốc stonger : kill -HUP pid
. Nếu vẫn thất bại, gửi SIGKILL. Nhưng, bạn chỉ nên làm như vậy như là phương sách cuối cùng, bởi vì SIGKILL khiến kernel chấm dứt quá trình ngay lập tức mà không có khả năng dọn dẹp. Điều này đôi khi có thể dẫn đến tham nhũng dữ liệu hoặc các vấn đề khác. Vì vậy, một lần nữa, chỉ gửi SIGKILL như là phương sách cuối cùng. Để làm như vậy, làm kill -KILL pid
hoặc kill -9 pid
.
Tất nhiên, nếu bạn đang chạy một giao diện đồ họa, bạn không cần phải đánh lừa thứ công cụ dòng lệnh điên rồ này để hoàn thành công việc. Chỉ cần mở "Giám sát hệ thống", điều hướng đến tab Quy trình, chọn quy trình bạn muốn tạm dừng (Hừm, có thể là quy trình sử dụng 90% CPU không?) Và nhấp chuột phải vào nó. Vì quá trình đã dừng lại, (đó là vấn đề, phải không?), Chọn End Process hoặc Kill Process từ menu kết quả.
Tín dụng cho koanhead
kill -9
là lời khuyên tồi. Tôi đã chỉnh sửa câu trả lời để sửa nó.
ping
lệnh và sleep
. Theo unix.stackexchange.com/a/275826/72988 , không thể có trong Ubuntu nếu không có multiplexer
.
Tôi không nghĩ rằng có bất kỳ nhu cầu nào về các lệnh dài như vậy khi bạn có thể thực hiện các lệnh tương tự với pgrep, pkill, pidof, v.v.
pgrep:
pgrep [options] pattern
MÔ TẢ: pgrep xem qua các quy trình hiện đang chạy và liệt kê các ID quy trình phù hợp với tiêu chí lựa chọn cho thiết bị xuất chuẩn. Tất cả các tiêu chí phải phù hợp. Ví dụ,
Để tìm quá trình có tên sshd thuộc sở hữu của root.
$ pgrep -u root sshd
Liệt kê các tiến trình thuộc sở hữu gốc OR daemon.
$ pgrep -u root,daemon
pidof:
MÔ TẢ :
Pidof tìm thấy id quá trình (pids) của các chương trình được đặt tên. Nó in những id đó trên đầu ra tiêu chuẩn.
cú pháp: pidof chương trình tên
Để giết một chương trình bằng pid, hãy sử dụng ví dụ pkill:
pkill pid
pkill -f process_name
pkill -o process_name
pkill -n process_name
pkill -l process_name
-f
cờ: Tìm kiếm cờ process_name (xem man pkill)
-o
: Chỉ chọn phiên bản cũ nhất trong các quy trình khớp.
-n
cờ: Chỉ chọn mới nhất trong các quy trình khớp.
-l
cờ: Liệt kê tên quy trình cũng như ID quy trình.
Cách dễ nhất để biết pid của chương trình đang chạy là sử dụng:
pidof <application name>
Ví dụ: nếu bạn bắt đầu vim và muốn biết pid của nó:
pidof vim
Hãy nhớ rằng bạn sẽ cần cung cấp tên chương trình chính xác đã được bắt đầu.
Ví dụ: nếu bạn đang chạy vi và thực thi, pidof vim
bạn sẽ không nhận được kết quả chính xác.
Tham khảo pidof
trang hướng dẫn của để biết thêm.
pidof mysqld
trả về một PID. Tuy nhiên, nếu tôi gõ pidof Mariadb
không có gì được trả lại. Đây có phải là cùng một PID cho cả MariaDB và MySQL không?
Tôi đã thấy thật tuyệt khi sử dụng một tìm kiếm không phân biệt chữ hoa chữ thường bằng cách thêm "-i" và sử dụng "phụ" thay vì "ax" để có đầu ra mô tả hơn:
ps aux | grep -i firefox
Nếu bạn muốn giết tất cả các quy trình bạn có thể sử dụng:
ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
Đó là một sự giết chóc mạnh mẽ. Thả "-9" nếu bạn muốn giết mềm.
ps aux | grep -i firefox...
quá trình, bởi vì nó chứa văn bản firefox
trong lệnh của nó!
grep -i firefo[x]
để chỉ khớp với firefox
Đối với những người đang chạy Ubuntu 16.04 LTS, bạn phải sử dụng ps ax
và không chỉps
ở dòng lệnh, nếu không, bạn sẽ chỉ nhận được các quy trình sinh ra từ phiên bản thiết bị đầu cuối cụ thể mà bạn đang ở. (Thường chỉ là 'bash' [shell bạn đang ở ] và 'ps' [những gì bạn vừa chạy])
ps -e
(hiển thị tất cả) và ps -ejH
(hiển thị cây quy trình).
Bạn cũng có thể mở một thiết bị đầu cuối khác (hoặc chuyển sang một tty khác) và chạy top
, về cơ bản là phiên bản văn bản của System Monitor. Cột đầu tiên liệt kê PID của từng quá trình đang chạy mà bạn có thể tắt bằng cách nhấn K, nhập vào PID và sau đó nhập tín hiệu số để gửi.
Bạn có thể làm:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
hai ống đầu tiên có được thông tin về quy trình, tiếp theo chúng tôi cố gắng lấy cột PID bằng cách sử dụng phép cắt trường cũ và sau đó chúng tôi đưa ra kết quả PID để tiêu diệt.
kill -9
là khẩu súng lớn nhất bạn phải giết một quá trình. Ban đầu, bạn nên thử một tín hiệu nhẹ nhàng hơn trước khi sử dụng SIGKILL để tạo cơ hội cho quá trình làm sạch tài nguyên của nó.