Saya telah menyusun perintah untuk mengembalikan ID proses dari daemon yang sedang berjalan:
ps aux | grep daemon_name | awk "{ print \$2 }"
Ini berfungsi dengan baik dan mengembalikan PID, tetapi juga mengembalikan PID kedua yang mungkin merupakan proses yang saya jalankan sekarang. Apakah ada cara saya dapat mengecualikan perintah saya dari daftar PID yang dikembalikan?
Saya telah mengujinya beberapa kali dan tampaknya perintah saya selalu merupakan PID kedua dalam daftar, tetapi saya tidak ingin mengambil PID pertama jika itu tidak akurat.
Jawaban:
-v
sakelar grep membalikkan hasilnya, mengeluarkannya dari antrian. Jadi buat seperti:Pembaruan . Anda juga dapat menggunakan
-C
sakelar untuk menentukan nama perintah seperti:Yang terakhir
-o
menentukan kolom informasi mana yang Anda inginkan dalam daftar.pid
hanya mencantumkan kolom id proses. Dan tanda sama dengan=
setelahpid
berarti tidak akan ada judul kolom untuk yang itu, sehingga Anda hanya mendapatkan angka yang jelas - PID.Semoga ini membantu.
sumber
Anda dapat menggunakan trik kelas karakter. "[d]" tidak cocok dengan "[d]" hanya "d".
Saya lebih suka menggunakan ini
| grep -v grep
.sumber
| grep -v grep
akan lebih mudah untuk dipahami ketika saya meninjau kembali kode saya."[d]" does not match "[d]" only "d"
?grep
perintah tidak akan cocok denganps
garis output untukgrep
perintah itu sendiri (apa yang disebut "PID kedua" dalam pertanyaan asli). ekspresia[xy]d
tidak tidak cocok dengan teksa[xy]d
tetapi tidak teks pertandinganaxd
atau teksayd
. Karenanya ekspresi[f]oo
cocok dengan teksfoo
tetapi bukan teks[f]oo
. Saya harap itu jelas.Hindari parsing
ps
output jika ada alternatif yang lebih andal.sumber
pgrep
mencari dengan substring sementarapidof
dengan pencocokan tepat - tepat apa yang saya butuhkan! Terima kasih!The
ps -C
pilihan adalah tidak universal pada semua sistem berbasis Unix tetapi jika bekerja pada sistem Anda. Sebaliknya saya akan menghindari grep sama sekali:ps aux | awk '/daemon_name/ && !/awk/ { print $2 }'
Tidak perlu melarikan diri dari apa pun dalam tanda kutip tunggal.
ps aux
akan memberi Anda daftar lengkap proses pada sebagian besar sistem berbasis Unix danawk
biasanya diinstal secara default.sumber
Gunakan
pgrep
untuk mencari pid dari suatu proses dengan nama:Dengan nama proses ekstra di hasilnya (
-l
):Cari dan tampilkan nama proses (
-l
) dan argumen (-f
):Hal yang baik tentang itu
pgrep
adalah tidak akan pernah melaporkan dirinya sebagai pertandingan. Tetapi Anda tidak perlu mendapatkan pidpgrep
lalu mematikan proses yang sesuaikill
. Gunakanpkill
sebaliknya:Tentukan
SIGKILL
sinyal (-9
atau-KILL
) alih-alihSIGTERM
(secara default):Cari nama proses (
-l
) dan argumen (-f
), minta konfirmasi (-I
) sebelum mematikannya denganSIGKILL
sinyal (-9
atau-KILL
):Perhatikan bahwa
-I
opsi ini hanya tersedia pada beberapa versipkill
, misalnya yang ada di OS X Mavericks.sumber
Jika Anda menggunakan bash, Anda juga dapat melakukan ini dengan cara berikut dengan memanfaatkan
ps -eaf
sumber
ps -eaf | grep "process_name" | awk '{print $2}'
baris ini memberi Anda kembali pid (proses id) tidak termasuk "grep"
sumber