Câu hỏi giết tất cả các quy trình của người dùng ngoại trừ một vài trong linux


Tôi đã chạy một số quy trình trong một phiên màn hình trên một máy chủ từ xa. Khi tôi cố gắng giết tất cả các quy trình đó bằng cách:

pkill -U tim

tất cả các quy trình của tôi đều bị giết bao gồm cả những thứ tôi không muốn giết (tức là màn hình và kết nối ssh).

Có cách nào để giết tất cả các quy trình của tôi ngoại trừ màn hình và kết nối ssh không?


4
2017-09-30 17:23


gốc




Các câu trả lời:


Kinda tin tặc:

ps -U tim | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill

điều này sẽ giết tất cả mọi thứ nhưng bất kỳ quá trình ssh hoặc màn hình nào. Dưới đây là các lệnh được giải thích:

  • ps -U tim - rõ ràng, liệt kê mọi quy trình từ thời gian người dùng
  • egrep -v "ssh|screen" - sẽ xóa các dòng có ssh hoặc các quá trình màn hình
  • cut -b11-15 - sẽ cắt dữ liệu trong cột 11-15 (thường là nơi đặt PID
  • xargs -t kill - sẽ chuyển tất cả ID của quá trình đến lệnh kill

Bạn cũng có thể sử dụng awk, nếu bạn quen với điều đó.

ps -U tim | egrep -v "ssh|screen" | awk '{print $2}' | xargs -t kill

10
2017-09-30 18:39





Không có gì được xây dựng trong đó tôi nhận thức được. Bạn có thể tạo một kịch bản như thế này:

#!/bin/bash
ps ux | sed -e '/bash/d' -e '/screen/d' | awk '{print $2}' | while read process
do 
  kill $process
done

Nếu có bất kỳ quy trình nào khác mà bạn muốn tránh giết bạn chỉ cần thêm

-e '/processname/d'

mục vào phần sed. Có lẽ một cách sạch hơn để xử lý nó, nhưng điều này sẽ làm việc.


1
2017-09-30 18:36





Nếu bạn đang giết chết tất cả các procs của bạn rất nhiều, bạn có thể muốn điều tra tại sao bạn cần phải làm điều đó ... nhưng hey, đây là tất cả về làm việc, không phải về không phải làm việc.

Một giải pháp dễ dàng sẽ là sử dụng hai userID ... một cho màn hình và kết nối SSH của bạn, và một cho tất cả các quá trình bạn sẽ ở một số điểm muốn giết.

Điều này vượt xa "hacker" và thành "hack" đơn giản nhưng nó có thêm lợi thế trong bất kỳ chương trình nào khác mà bạn chạy khi người dùng "kết nối" sẽ không bị giết khi bạn tiêu diệt các procs khác. Điều này có thể bao gồm "đuôi" của các bản ghi lỗi và những thứ tương tự mà bạn có thể muốn để lại xung quanh.

Hi vọng điêu nay co ich!


1
2017-09-30 18:48



bạn có nghĩa là có hai userID cho máy chủ từ xa? Chỉ tò mò thôi, tôi có thể tạo một cái khác cho bản thân mình mà không thể chuyển sang root được không? - Tim


Thử:

ps aux | grep ^$LOGNAME | egrep -v 'ps aux|-bash|sshd' | awk '{ print $2 }' | xargs kill -9; ps aux | grep $LOGNAME

1
2017-09-22 14:44





Tôi đã sử dụng cách tiếp cận của @RoyRico - không thể nhận xét về bài đăng đó vì thiếu danh tiếng - và điều chỉnh nó cho hệ thống của tôi. Bởi vì một số cấu hình khác nhau mà người ta không làm việc off-the-shelf.

ps -U myUserName | egrep -v "ssh|screen|grep|bash|systemd|(sd-pam)|ps" | awk '{print $1}' | tail -n +2 | xargs -t kill

Vâng, tôi loại trừ nhiều quy trình mà tôi không muốn bị giết. Thứ hai, các PID đến trong cột đầu tiên vì vậy lệnh 'cắt' trước đây hoàn toàn sai vị trí (như là một giải pháp hacker hoàn toàn bình thường và chấp nhận được);). Thứ ba, trong khi grep'ing tôi đã có một "PID" như là một dòng đầu mà tôi loại trừ bằng cách sử dụng đuôi.


0
2017-09-09 13:29