Làm cách nào để diệt các tiến trình trong Ubuntu?


149

Làm cách nào để giết tất cả các quy trình được chạy bởi tài khoản không phải root của tôi?

Tôi có một số quy trình smbd quay mà tôi đã gây ra từ máy windows của mình và vì vậy tôi đã telnett vào máy chủ linux và tôi muốn giết các quy trình quay đó. Tôi không có quyền khởi động lại dịch vụ hoặc khởi động lại máy.

Câu trả lời:


172

Để tiêu diệt tất cả các quy trình mà bạn có quyền giết, chỉ cần chạy lệnh

kill -15 -1hoặc kill -9 -1tùy thuộc vào hành vi mong muốn (sử dụng man killđể biết chi tiết)

Để giết một quy trình cụ thể, giả sử firefox, chỉ cần chạy

pkill firefoxhoặc killall firefoxtùy thuộc vào hành vi bạn muốn: Sự khác biệt giữa 'killall' và 'pkill' là gì?

Nếu bạn muốn xem những tiến trình nào đang chạy, hãy sử dụng lệnh

ps -ef

Nếu bạn muốn tra cứu tất cả các quy trình của người dùng bob, điều này có thể giúp

pgrep -l -u bob

hoặc là

ps -ef | grep bob

4
Tôi sẽ bắt đầu kill -15 -1và chỉ chuyển sang kill -9 -1nếu có những quy trình cứng đầu và tôi biết mình đang làm gì . Việc giết ngẫu nhiên các quy trình có thể ở giữa một giao dịch cơ sở dữ liệu không phải là điều mà người ta nên làm một cách tình cờ như bạn đề xuất.
Simon Richter

Ngoài ra, quy trình của Firefox được đặt tên firefox-bin.
Simon Richter

Không, bạn có thể thử chạy killall firefoxkillall firefox-binvà xem những gì hoạt động. Tôi đồng ý với nhận xét đầu tiên của bạn.
ste_kwr

Cảm ơn @ste_kwr, đã làm việc với các hướng dẫn của bạn, sau khi vật lộn trong hai ngày ...
Java.beginner

Lợi thế của việc không cần PID là trong các công việc định kỳ. Sử dụng tên làm việc sạch sẽ.
SDsolar

56

Sử dụng sudo kill <pid>hoặcsudo killall <process-name>


3
Tôi không nghĩ rằng điều này có liên quan đến câu hỏi này, bạn đang sử dụng sudo - OP không có những đặc quyền như vậy, như đã đề cập trong câu hỏi.
pl1nk

OP không có đặc quyền, vui lòng chỉnh sửa câu trả lời của bạn hoặc có thể bị xóa hoặc chuyển đổi thành nhận xét là "không phải là câu trả lời".
ish

Nếu anh ta không có đặc quyền, anh ta chỉ cần giết <pid> hoặc killall <tên tiến trình> Tôi chỉ sử dụng nó trong tài khoản không phải root của mình, tôi sẽ không thể làm điều đó nếu không có Câu trả lời này .
Shailyn Ortiz

20

Hãy thử một cái gì đó nhiều hơn:

sudo apt-get install htop 

Các toplệnh là cách truyền thống để xem sử dụng tài nguyên của hệ thống của bạn và xem các tiến trình đang chiếm hầu hết các tài nguyên hệ thống. Top hiển thị danh sách các quy trình, với các quy trình sử dụng nhiều CPU nhất ở trên cùng.

htophiển thị cùng thông tin với bố cục dễ hiểu hơn. Nó cũng cho phép bạn chọn các quy trình với các phím mũi tên và thực hiện các hành động, chẳng hạn như giết chúng hoặc thay đổi mức độ ưu tiên của chúng, bằng các Fphím.


16

Bạn có thể dùng

ps -ax | grep application name 

Nếu bạn tìm kiếm loại firefox trong terminal như thế ps -ax | grep firefox, nó sẽ hiển thị id quá trình của ứng dụng tương ứng. Bạn có thể dừng ứng dụng đó bằng killlệnh nếu process id = 1317,

kill -9 1317

13

Tôi sẽ sử dụng xkill. Nhập xkillvào một thiết bị đầu cuối và bấm vào cửa sổ, hoặc nhập xkillvà ID quá trình và nó sẽ bị chấm dứt.

Tìm hiểu thêm về xkilltrên x.org.


1
Sử dụng nó thứ hai trong tần số sau khi pkill nd yêu nó. +1
Sergiy Kolodyazhnyy

xkill không hoạt động trong trường hợp này ...
PythoNic

@PythoNic trong trường hợp nào vậy?
Alvar

1
Anh ta muốn giết một quá trình không có cửa sổ cũng không liên quan đến máy chủ X vì dường như đối với tôi ... (Dù sao đó là một công cụ tốt.)
PythoNic

9

Để cố gắng giết tất cả các quy trình thuộc sở hữu của người dùng username, hãy chạy:

pkill -U username

7

Tôi sẽ chia vấn đề của bạn thành 2 phần:

1) Làm thế nào để tôi tìm thấy các quy trình bắt đầu bởi tôi? Chạy này:

ps -u `whoami`

Đây whoamichỉ là trong trường hợp bạn không biết tên tài khoản bạn đang sử dụng, nếu không, chỉ cần nhập tên của tài khoản mà không có dấu ngoặc kép.

Điều này sẽ liệt kê tất cả các quy trình có thể bị xóa bởi tài khoản của bạn.

2) psLệnh sẽ liệt kê số tiến trình, TTY, Thời gian và CMD. ID tiến trình là cột đầu tiên. Sử dụng số đó để giết quá trình. Hãy cẩn thận trong khi giết quá trình. Bạn có thể phá vỡ một cái gì đó nếu bạn giết quá trình sai. Để giết một tiến trình, bạn sẽ sử dụng killlệnh, nó sẽ gửi một TÍN HIỆU cho tiến trình đó. Tín hiệu cho biết những gì quá trình nên làm. Ví dụ, gửi một -1quá trình sẽ yêu cầu nó tải lại tệp cấu hình; gửi a -2tương đương với việc nhấn Control + C trong quá trình đó; -9sẽ khiến kernel từ bỏ tiến trình, mà không truyền đạt nó tới tiến trình.

Giả sử rằng ps -u whoamitrả lại một cái gì đó như

  PID TTY          TIME CMD
 4333 pts/1    00:00:00 fish
 4335 ?        00:00:00 fishd
 4816 ?        00:00:00 intellij
 4868 ?        00:50:42 java
 4939 ?        00:00:19 fsnotifier64
 7667 ?        02:49:08 firefox
 7698 ?        00:00:00 unity-webapps-s

Và bạn muốn giết firefoxtiến trình bằng id tiến trình của nó, sau đó bạn sẽ làm:

kill -1 7667

Sau đó, bạn sẽ chạy lại cùng một pslệnh và kiểm tra xem quy trình có còn chạy không. Nếu nó vẫn chạy, sau đó làm một

kill -2 7667

làm việc theo cách của bạn lên đến -9.

Để tắt tất cả các quy trình bắt đầu bởi tài khoản của bạn, hãy nhập kill <level> -1. Tương tự như trước: làm việc theo cách của bạn -9.

Nếu bạn biết tên của quá trình bạn có thể chỉ cần đi killall <processname>, nơi đó là những gì bạn đang cố gắng để giết. Ví dụ: killall fish(cá, theo nghĩa này, là SHell tương tác thân thiện).

Tài liệu cho killallcó thể được tìm thấy ở đây: http://manpages.ubfox.com/manpages/hardy/man1/killall.1.html


3

Với ứng dụng này, bạn có thể xem danh sách chương trình

cài đặt htop

sudo apt-get install htop

để xem quy trình và hủy quy trình Bạn có thể cài đặt nó và chỉ cần xóa

nhập mô tả hình ảnh ở đây


2

... Tất cả các quy trình trong Linux đều phản hồi tín hiệu. Tín hiệu là một cách thức cấp os để báo cho các chương trình chấm dứt hoặc sửa đổi hành vi của chúng.

Làm thế nào để gửi tín hiệu quá trình bằng PID

Cách phổ biến nhất để truyền tín hiệu đến một chương trình là với lệnh kill.

Như bạn có thể mong đợi, chức năng mặc định của tiện ích này là cố gắng giết một quá trình:

kill PID_of_target_process

Điều này sẽ gửi tín hiệu HẠN cho quá trình. Tín hiệu TERM cho biết quá trình vui lòng chấm dứt. Điều này cho phép chương trình thực hiện các hoạt động dọn dẹp và thoát ra một cách trơn tru.

Nếu chương trình hoạt động sai và không thoát khi được cung cấp tín hiệu TERM, chúng ta có thể tăng tín hiệu bằng cách chuyển tín hiệu KILL:

kill -KILL PID_of_target_process

Đây là một tín hiệu đặc biệt không được gửi đến chương trình.

Thay vào đó, nó được trao cho kernel hệ điều hành, giúp tắt tiến trình. Điều này được sử dụng để bỏ qua các chương trình bỏ qua các tín hiệu được gửi đến chúng ...


2

Tôi đã viết một đoạn script nhỏ mà tôi đã viết để giết (trong trường hợp của tôi) Skype:

kill -s 9 `ps aux | grep skype | head -n 1 | cut -f4 -d" "`

Nhưng tôi thấy rằng nhiều như vậy đã hoạt động vào ngày hôm sau, nó đã không hoạt động vào ngày hôm sau bởi vì pid có chiều dài khác nhau và ở đó, số lượng không gian là khác nhau

Sau đó, tôi đã xem qua trang web này và đã thử

pgrep -l -u justin

thuận tiện xuất ra các quy trình theo định dạng

[pid] [name]

Vì vậy, tôi đã điều chỉnh mã của mình trong kịch bản này:

kill -s 9 `pgrep -l -u justin | grep skype | cut -f1 -d" "`

Điều này thực hiện là tất cả các quy trình justinđang chạy (có thể thay đổi thành bất kỳ tên người dùng nào) greptìm kiếm skype(điều này có thể được thay đổi theo quy trình của bạn) và sau đó các đường dẫn cutmà sau đó chỉ đọc PID và cuối cùng sử dụng điều đó PID trong killlệnh để giết nó.


Bạn có thể đã đánh rơi -l, và chạy pgrep -u justin skypevà giết: pkill -u justin skype(hoặc pkill -KILL -u justin skypegửi SIGKILL).
muru

Đây chắc chắn là cách Unix. Làm tốt cả hai bạn. Tôi sẽ sử dụng cái này
SDsolar

1

Đây là một kịch bản python đơn giản mà tôi đã viết, killProcess.py, sẽ chấp nhận mọi thứ làm đầu vào và giết nó.

Tôi đã viết kịch bản này bởi vì tôi có rất nhiều quá trình python hoặc nút mà tôi muốn giết riêng lẻ và lập trình. Tôi không thể sử dụng "killall python" vì nó sẽ dừng các tiến trình mà tôi cần tiếp tục chạy.

Vui lòng đặt tên tệp là "killProcess.py", sau đó thêm tên của tập lệnh bạn muốn dừng. Ví dụ: python killProcess.py runnablePoller.py sẽ giết tệp runnablePoller.py

import os;
import sys;
for arg in sys.argv:
    if(arg!="killProcess.py"):
        process=arg;
        print(process);
processes =os.popen("ps -ef | grep "+process).read();
processes=processes.split("\n");
processes=processes[0].split(" ");
#print(processes);
for p in processes:
    try:
        pid=int(p);
        print(pid); 
        break;
    except:
        continue;

os.system("kill "+str(pid));

0

Tôi đã sử dụng quy trình sau để giết một tiến trình trong Ubuntu ::

Bước 1: Nhận pid của quá trình bằng cách sử dụng grep hoặc bạn có thể sử dụng -C cũng ::

ps aux | -C 'filename'

hoặc là

ps -ef | -C 'filename'

hoặc là

ps aux | grep 'filename'

hoặc là

ps -ef | grep 'filename' 

Bước 2: Lưu ý số pid.

Bước 3: Sử dụng lệnh 'kill' cùng với số pid là:

kill pidnumber

0

Ctrl+ Alt+ Deletecó thể được đặt để cung cấp cho bạn quyền truy cập vào trình quản lý tác vụ, từ đó dễ dàng giết chết các quy trình chỉ bằng một vài cú nhấp chuột và đối với tôi, ít yêu cầu ghi nhớ các lệnh có thể gây hại nếu thực hiện sai:

http://ubfoxhandbook.org/index.php/2013/07/use-ctrl-alt-del-task-manager-ubfox/

https://www.itsmarttricks.com/a-guide-to-kill-pkill-and-killall-commands-to-stop-the- process-in-linux-kill-process-linux /

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.