Mendapatkan pids dari ps -ef | kata kunci grep

111

Saya ingin menggunakan ps -ef | grep "keyword"untuk menentukan pid dari proses daemon (ada string unik dalam output ps -ef di dalamnya).

Saya dapat menghentikan proses dengan pkill keywordapakah ada perintah yang mengembalikan pid daripada membunuhnya? (pidof atau pgrep tidak berfungsi)

Dennis Ich
sumber

Jawaban:

231

Anda dapat menggunakan pgrepselama Anda menyertakan -fopsi. Itu membuat pgrepkata kunci yang cocok di seluruh perintah (termasuk argumen), bukan hanya nama proses.

pgrep -f keyword

Dari halaman manual :

-f       Pola biasanya hanya cocok dengan nama proses. Jika -fdisetel, baris perintah lengkap digunakan.


Jika Anda benar-benar ingin menghindari pgrep, coba:

ps -ef | awk '/[k]eyword/{print $2}'

Perhatikan []sekitar huruf pertama kata kunci. Itu adalah trik yang berguna untuk menghindari pencocokan awkperintah itu sendiri.

Shawn Chin
sumber
3
ps terlalu sering digunakan, dan pgrep kurang digunakan. Terima kasih atas kirimannya.
Felipe Alvarez
6
Salah satu cara untuk melewatkan keluaran untuk membunuh adalah: kill -9 `pgrep -f keyword`
Kris
Jawaban ini adalah yang terbaik. Begitu banyak waktu yang telah saya buangps aux | grep chrome
Brandon
Harus menggunakan [k]triknya pgrep -f. Skrip saya berjalan di subkulit jadi saya pikir itu mengambil perintah induknya (sulit untuk mengetahui secara pasti - pid yang dikembalikannya hilang ketika perintah selesai dijalankan!)
ArtOfWarfare
2
@Kris untuk kasus penggunaan ini tidak akan lebih mudah digunakan pkill -9 -f keyword?
oidualc
53

Mencoba

ps -ef | grep "KEYWORD" | awk '{print $2}'

Perintah itu akan memberi Anda PID dari proses dengan KEYWORD di dalamnya. Dalam contoh ini, awkmengembalikan apa yang ada di kolom ke-2 dari output.

Lewis Norton
sumber
2
Karena ini bisa mengembalikan lebih dari satu pid, Anda bisa mendapatkan pid pertama dengan menambahkan | head -1.
Kris
'head -1' akan mengembalikan grep PID di beberapa linux, Seharusnya tail -1.
Joao Vitorino
22

ps -ef | grep KEYWORD | grep -v grep | awk '{print $2}'

Vinayak
sumber
4
Mungkin salah ketik? ps -ef | grep KEYWORD | grep -v grep | awk '{print $ 2}'
rmv
Apakah Anda tahu cara meneruskan PID yang dikembalikan ke "kill -9"?!
alybadawy
3
@alybadawy tambahkan saja | xargs kill -9akhir
patte
8

saya menggunakan

ps -C "keyword" -o pid=

Perintah ini akan memberi Anda nomor PID.

Arksonic
sumber
7

Ini tersedia di linux: pidof kata kunci

dbrank0
sumber
3

Untuk menghentikan proses dengan kata kunci tertentu, Anda dapat membuat alias di ~/.bashrc(linux) atau ~/.bash_profile(mac).

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"
swayamraina
sumber
Sempurna! Menambahkan pipa ke ujung | head -1bungkus ini semuanya bagus dan rapi.
Russ