Làm thế nào để giết một tiến trình với một lệnh duy nhất?


18

Tôi muốn giết một tiến trình, sau khi tìm id trong một bước duy nhất.

Tôi hiện đang sử dụng hai lệnh này:

pidof <name>
kill <#number_which_is_result_of_command>

Làm thế nào tôi có thể viết một lệnh duy nhất để làm điều này?


Cái quái gì vậy? bash? tcsh? ...?
Levon

2
Bạn có thể tìm kiếm sự thay thế lệnh trong tài liệu của shell của bạn.
deviantkarot

2
Tôi giết mọi thứ một cách trực quan bằng cách sử dụng: xkill. Chỉ cần nhập xkill trong Terminal, di chuyển con trỏ vào ứng dụng vi phạm và nhấn nút.Gone

1
@arochester Điều đó hoạt động, nhưng bị giới hạn trong môi trường GUI, killnhiều loại lệnh sẽ hoạt động từ bảng điều khiển (cộng có thể được tự động hóa trong các tập lệnh, v.v.). Vẫn tốt để làm cho mọi người nhận thức được các xkilltùy chọn cho chắc chắn.
Levon

Nếu một trong những câu trả lời dưới đây giải quyết được vấn đề của bạn, vui lòng xem xét chấp nhận nó bằng cách nhấp vào dấu chọn bên cạnh câu trả lời. Nó sẽ thưởng cho cả hai bên một số điểm đại diện và đánh dấu vấn đề này đã được giải quyết.
Levon

Câu trả lời:


18

Bạn cũng có thể giết các tiến trình theo tên:

Thí dụ:

pkill vim  # kill all processes containing vim in the process name

@Levon Bạn có chắc không? Gợi ý: Nó sẽ hoạt động nếu bạn đổi pkillsang kill?
Mikel

Nó sẽ không hoạt động, Levon. giết -9 giết quá trình bằng PID và pkill -9 giết tiến trình theo tên của nó.
từ

6
Không có -ohoặc -n, pkillcũng giết chết tất cả các quy trình khớp, không chỉ một.
Mikel

3
-1 cho đề xuất sử dụng SIGKILL (-9), đó là hệ sinh thái quá trình xấu. Với SIGKILL, dữ liệu trong quy trình không bị xóa, tạo ra hỏng dữ liệu.
Arcege

6
Gợi ý killalllà RẤT NHIỀU TƯ VẤN. Nó thực hiện những thứ rất khác nhau tùy thuộc vào Unix / Linux mà bạn đang sử dụng.
MikeyB

13

Để trả lời câu hỏi cụ thể của bạn với bộ lệnh của bạn, hãy sử dụng:

kill `pidof <name>`

pidof <name>cung cấp cho bạn PID của quá trình bạn đang cố gắng để giết, bạn có thể sử dụng nó với các công tắc dòng lệnh, -9v.v.

Đã thử nghiệm với bashtcsh.


9
BTW, kill $(pidof <name>)tương thích hơn (POSIX) và có thể được sử dụng bên trong khối thay thế lệnh khác .
Rudolf Adamkovic

@RudolfAdamkovic Tôi đồng ý, đó là một lựa chọn tốt hơn, chắc chắn trong các kịch bản. Tuy nhiên, đối với một lệnh gõ nhanh, tôi thấy việc sử dụng backticks dễ dàng hơn .. cộng với nó hoạt động với cả shell thông thường (bash và tcsh) .. Tôi không thể khiến $phiên bản hoạt động với tcsh.
Levon

Chỉ cần thử với tcshvà bạn đã đúng. Không biết điều đó. Cảm ơn thông tin!
Rudolf Adamkovic

7

Nên bình luận về Levon's, nhưng tôi thiếu người đại diện ở đây để làm như vậy:

Riffing về các cuộc thảo luận trong câu trả lời được chấp nhận của câu hỏi này: /server/397762/how-to-make- Folders-00-99-with-a-single-common-in-Ubuntu

Tôi muốn nói rằng nó có thể thích hợp hơn (hoặc ít nhất là hữu ích / rõ ràng hơn cho những người tìm kiếm sau này) để chạy

kill $(pidof <name>)

Tham khảo thêm về $ () so với ``: http://mywiki.wooledge.org/BashFAQ/082


+1 để bao gồm các liên kết dưới cùng đặc biệt. Tôi đã nhận được một bình luận tương tự từ @RudolfAdamkovic, hãy xem câu trả lời của tôi cho anh ấy. Bạn có biết một phiên bản này hoạt động với tcsh? (Tôi vẫn thấy backticks dễ dàng hơn khi gõ lệnh nhanh trong shell :)
Levon

Tôi chỉ làm việc với bash (trên Linux) & ksh (trên HP-UX); chưa đi qua đường với tcsh, xin lỗi.
Ghillie Dhu

1

Bạn cũng có thể sử dụng killalllệnh để giết quá trình cụ thể.

killall vim
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.