2013-07-03 23 views
36

Bằng cách sử dụng "ucbps" lệnh i am có thể nhận được tất cả PIDLàm thế nào để có được PID của quá trình bằng cách xác định tên quy trình và lưu trữ nó trong một biến để sử dụng thêm?

$ ucbps 

    Userid  PID  CPU % Mem % FD Used Server     Port 
    ========================================================================= 

    512  5783 2.50 16.30 350  managed1_adrrtwls02  61001 
    512  8896 2.70 21.10 393  admin_adrrtwls02  61000 
    512  9053 2.70 17.10 351  managed2_adrrtwls02  61002 

tôi muốn làm điều đó như thế này, nhưng không biết làm thế nào để làm

  1. biến = get pid của tiến trình bởi processname.
  2. Sau đó, sử dụng lệnh kill -9 này.

Trả lời

66

Nếu bạn muốn kill -9 dựa trên một chuỗi (bạn có thể muốn thử giết đầu tiên), bạn có thể làm một cái gì đó như thế này:

ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " $1}' 

này sẽ cho bạn thấy những gì bạn đang về để giết (rất, rất quan trọng) và chỉ cần ống nó để sh khi thời gian đến để thực hiện:

ps axf | grep <process name> | grep -v grep | awk '{print "kill -9 " $1}' | sh 
+0

cách để tránh "grep -v grep" là sử dụng "grep " để nó nội suy chuỗi và quá trình nam [e] không được tìm thấy khi grep đầu tiên thực thi, nếu điều đó có ý nghĩa. – spig

+3

Tôi nghĩ điều này dễ dàng hơn pgrep -f | awk '{print' kill -9 "$ 1} '| sh –

51
pids=$(pgrep <name>) 

sẽ giúp bạn có được PID của tất cả các quá trình với tên đã cho. Để giết hết bọn chúng, sử dụng

kill -9 $pids 

Để ngưng sử dụng một biến và trực tiếp giết chết tất cả các quy trình với một vấn đề tên được đặt

pkill -9 <name> 
+0

$ pids = $ (pgrep admin_adrrtwls02) $ kill -9 $ pids Cách sử dụng: giết [-l] [-n signum] [-s signame] job ... Hoặc: kill [options] -l [arg ...] – Nidhi

+0

Các chương trình Unix có xu hướng in ra mô tả sử dụng của chúng khi không có đối số cần thiết. Trong ví dụ của bạn, hầu hết không có quy trình nào có tên admin_adrrtwls02 được tìm thấy. Do đó $ pids đánh giá về chuỗi rỗng và lệnh kill được thực hiện mà không có đối số id tiến trình. pgrep tìm kiếm tên quy trình, không phải cho tên người dùng. Nhưng cũng có các cờ -u và -U để hạn chế pgrep cho các id người dùng đã cho. – XZS

+0

đã có quá trình với tên này là admin_adrrtwls02. Câu trả lời trên của Ben giải quyết vấn đề của tôi. Giải pháp của ông đã làm việc. – Nidhi

7

Một khả năng khác sẽ được sử dụng pidof nó thường đi kèm với hầu hết các bản phân phối. Nó sẽ trả về cho bạn PID của một quá trình đã cho bằng cách sử dụng tên của nó.

pidof process_name 

Bằng cách này bạn có thể lưu trữ thông tin đó trong một biến và thực thi kill -9 trên đó.

#!/bin/bash 
pid=`pidof process_name` 
kill -9 $pid 
11

Trên một dòng duy nhất ...

pgrep -f process_name | xargs kill -9 
+0

Như đã đề cập trong các nhận xét khác, tham số '-f' có thể hữu ích ở đây ' -f Mẫu thường chỉ khớp với tên quy trình. Khi -f được đặt, dòng lệnh đầy đủ được sử dụng.' 'pgrep -f process_name | xargs kill -9' –

0

sử dụng grep [n] ame để loại bỏ tên grep -v rằng đây là lần đầu tiên ... Sec sử dụng xargs trong cách thế nào đó là lên có sai với rnu bất cứ điều gì nó được đường ống bạn phải sử dụng -i (chế độ tương tác) nếu không bạn có thể có vấn đề với lệnh.

ps axf | grep | grep -v grep | awk '{print' kill -9 "$ 1} '? ps aux | grep [n] ame | awk '{print' kill -9 "$ 2} '? isnt tốt hơn?

+0

thậm chí còn tốt hơn: pidof name | xargs -i kill -9 {}? không? –

Các vấn đề liên quan