Chạy ps với mệnh đề là AND thay vì OR


1

Tôi đang tìm kiếm để xem nếu một quá trình cụ thể đang chạy như một người dùng cụ thể. Mà tôi có thể làm điều này

ps --no-headers -C command -o user | grep user

Điều này khá gọn gàng, tuy nhiên nó sẽ hơi xấu nếu tôi sau đó muốn in các đối số (có thể can thiệp vào grep cho tên người dùng!)

ps --no-headers -C command -o user,pid,comm | egrep \^user

Điều này thậm chí sẽ gây rối hơn nếu tôi không muốn người dùng là cột đầu tiên hoặc cuối cùng. Điều gì sẽ gọn gàng hơn nếu tôi có thể chỉ định các tùy chọn -C và -U trong PS như thế này

ps --no-headers -C command -U user -o pid

Tuy nhiên, điều này không hoạt động vì hai mệnh đề đóng vai trò là OR chứ không phải AND. Có một số chức năng của 'ps' mà tôi đang thiếu, hoặc có thể là một lớp lót gọn gàng khác mà tôi có thể sử dụng? Chúc mừng!

Câu trả lời:


3

pgrep hỗ trợ các điều kiện khác nhau:

pgrep -x -u "user" "command"

Thay thế -x với -f để phù hợp với các đối số; thêm vào -l để hiển thị dòng lệnh.

Bạn cũng có thể đọc dòng lệnh trực tiếp từ /proc/ PID / cmdline (tách biệt):

if pids=$(pgrep -x -u "user" "command"); then
    for pid in $pids; do
        tr "\0" " " < /proc/$pid/cmdline; echo
    done
fi
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.