Bagaimana cara mendapatkan pid dari proses yang sedang berjalan menggunakan satu perintah yang mengurai output dari ps?


22

Saya mencari satu baris yang mengembalikan pid dari proses yang berjalan.

Saat ini saya punya:

ps -A -o pid,cmd|grep xxx|head -n 1

Dan ini mengembalikan tinju pid, command. Saya hanya perlu nomor pertama dari keluaran dan mengabaikan sisanya. Saya kira sedatau awkakan membantu di sini tetapi pengalaman saya dengan mereka terbatas.

Juga, ini memiliki masalah lain, itu akan mengembalikan pid grep jika xxx tidak berjalan.

Sangat penting untuk memiliki satu baris, karena saya ingin menggunakan kembali output untuk melakukan sesuatu yang lain, seperti membunuh proses itu.


1
pipa melalui kepala dan tentukan garis untuk kembali dengan -n 1?
Mike McMahon

Jawaban:


28

Jika Anda hanya ingin pid dari proses Anda dapat menggunakan pgrepjika tersedia. pgrep <command>akan mengembalikan pid dari perintah (atau daftar pids jika ada lebih dari satu contoh dari perintah yang berjalan, dalam hal ini Anda dapat menggunakan headatau perintah lain yang sesuai)
Semoga ini bisa membantu!


+1 Penggunaan pgrep seperti biasa:kill `pgrep xxx`
Steve

20
@veve: Mungkin Anda harus melihat pkill.
Dijeda sampai pemberitahuan lebih lanjut.

7

Hanya perlu satu perintah lagi; Anda hanya menginginkan bidang pertama dari garis nilai yang dipisahkan ruang:

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'

Ya, dua. Saya menambahkan grep lain untuk menghapus grep sendiri dari output.


6

Cukup gunakan pgrep, itu jauh lebih lurus ke depan

pgrep -o -x xxxx

Di atas memilih proses tertua dengan nama yang tepat


Dan karena OP ingin menggunakan perintah untuk mematikan proses, pkill(dengan argumen yang sama) akan menjadi pilihan paling langsung.
bstpierre


0

Berjalan di Cygwin jadi saya tidak bisa menggunakan -A dan -o, tetapi sesuatu seperti ini:

$ ps
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
     5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
     7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash


$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
4580

0

Anda dapat melakukan sesuatu seperti

ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'

maka xxx haruslah nama proses dan itu tidak akan mengambil grep karena jangkar ^

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.