Bisakah output perintah ps Linux difilter oleh pengguna DAN perintah?

8

Saya membutuhkan pid untuk proses yang diberikan pemiliknya dan perintahnya. Saya dapat memfilter proses per pengguna dengan "ps -u xxx" dan perintahnya dengan "ps -C yyy", tetapi ketika saya mencoba "ps -u xxx -C yyy", mereka digabungkan menggunakan logika OR. Saya perlu DAN logika. Bagaimana saya bisa mencapai ini?

Krumelur
sumber

Jawaban:

11

Gunakan pgrep?

pgrep -U xxx yyy

hanya mengembalikan pid (atau pids, jika lebih dari satu proses cocok).

Marius Gedminas
sumber
2

Gunakan grep?

ps -u xxx | grep yyy | grep -v grep
RedGrittyBrick
sumber
2

Anda menggunakan communtuk menemukan PID yang umum untuk kedua kondisi:

ps -u xxx | sort > /tmp/ps-uxxx
ps -C yyy | sort > /tmp/ps-Cyyy
comm -1 -2 /tmp/ps-uxxx /tmp/ps-Cyyy

Menggunakan bash, Anda dapat menggunakan subtitusi proses untuk menghindari kebutuhan file sementara:

comm -1 -2 <(ps -u xxx | sort) <(ps -C yyy | sort)
GargantuChet
sumber
Bekerja, terima kasih banyak. ... Tetapi apakah tidak ada cara yang lebih mudah (tanpa menggunakan pgrep, karena ini tidak tersedia dalam konteks saya)?
guettli
Apa yang tidak mudah tentang ini?
GargantuChet
Saya tahu apa yang commdilakukan. Tapi saya menggunakannya hanya setahun sekali. Ini tidak intuitif untuk saya. Saya kira semua orang yang menggunakannya setiap hari melihat ini berbeda. Ada alasan bagus mengapa pgrep ada. Sayangnya pgrep tidak tersedia dalam konteks saya .... Tapi itu terpecahkan sekarang. Akar masalahnya adalah (menurut sudut pandang saya), bahwa saya perlu mendukung sistem operasi yang sangat lama tanpa pgrep.
guettli