Bagaimana menemukan ID Proses (PID) dari program terminal yang sedang berjalan?


Jawaban:


128

Buka terminal lain dan jalankan di ps ax | grep foomana foo adalah nama dari program yang tidak responsif. Ini akan mengembalikan garis output yang terlihat seperti ini:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

Bidang pertama dari setiap baris output adalah angka yang mewakili ID Proses dari program yang cocok dengan grep(Anda dapat dengan aman mengabaikan yang terakhir, yang mewakili grepdirinya sendiri.

Untuk menghentikan proses yang menyinggung, lakukan: di kill pidmana pid adalah ID Proses program. Anda mungkin harus menggunakan penilaian Anda tentang pertandingan mana yang perlu killdiedit, atau Anda bisa menggunakannya top. Menggunakan killdengan sendirinya mengirimkan SIGTERM, yang harus Anda coba dulu karena memungkinkan program untuk membersihkan dengan benar setelah sendiri. Jika SIGTERM gagal, cobalah SIGHUP, yang merupakan obat stonger: kill -HUP pid. Jika semuanya gagal, kirim SIGKILL. Tetapi, Anda hanya harus melakukannya sebagai upaya terakhir, karena SIGKILL menyebabkan kernel untuk segera menghentikan proses tanpa kemungkinan pembersihan. Hal ini kadang-kadang dapat menyebabkan kerusakan data atau masalah lainnya. Jadi sekali lagi, hanya mengirim SIGKILL sebagai pilihan terakhir. Untuk melakukannya, lakukan kill -KILL pidatau kill -9 pid.

Jika Anda menjalankan antarmuka grafis, tentu saja, Anda tidak perlu menipu dengan hal-hal baris perintah gila ini untuk menyelesaikan pekerjaan. Cukup buka "System Monitor", navigasikan ke tab Processes, pilih proses yang ingin Anda hentikan (Hm, mungkinkah yang menggunakan 90% CPU?) Dan klik kanan itu. Karena proses sudah berhenti, (itu masalahnya, kan?) Pilih End Process atau Kill Process dari menu yang dihasilkan.

Penghargaan untuk koanhead


5
Orang tidak boleh menggunakan SIGKILL (kill -9) kecuali semua metode lain gagal. Hanya daftar yang kill -9merupakan saran buruk. Saya telah mengedit jawaban untuk memperbaikinya.
Scott Severance

Bagaimana saya bisa menemukan pid dari fungsi kustom. Saya memiliki fungsi yang berisi loop dengan pingperintah dan sleep. Menurut unix.stackexchange.com/a/275826/72988 , tidak mungkin di Ubuntu tanpa multiplexer.
Timo

49

Saya tidak berpikir ada kebutuhan seperti perintah panjang ketika Anda dapat menyelesaikan perintah yang sama dengan pgrep, pkill, pidof dll ...

  • Untuk mendapatkan pid dari Program Menjalankan

pgrep:

   pgrep [options] pattern

DESCRIPTION: pgrep melihat melalui proses yang sedang berjalan dan mencantumkan ID proses yang sesuai dengan kriteria seleksi untuk stdout. Semua kriteria harus sesuai. Sebagai contoh,

  • Untuk menemukan proses bernama sshd dimiliki oleh root.

    $ pgrep -u root sshd
    
  • Daftar proses yang dimiliki oleh root ATAU daemon.

    $ pgrep -u root,daemon
    

pidof:

DESKRIPSI :

Pidof menemukan id proses (pers) dari program-program yang disebutkan. Ini mencetak id itu pada output standar.

sintaks: pidof program_name

  • Untuk mematikan program dengan pid, gunakan contoh pkill:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -fflag: Mencari flag process_name (lihat man pkill)
    -o: Pilih hanya yang tertua dari proses yang cocok.
    -nflag: Pilih hanya yang terbaru dari proses pencocokan.
    -lflag: Daftar nama proses serta ID proses.


1
Ini adalah jawaban terbaik
BlackDivine

21

Cara termudah untuk mengetahui pid dari program yang sedang berjalan adalah menggunakan:

pidof <application name>

Misalnya, jika Anda memulai vim dan ingin tahu pidnya:

pidof vim

Ingatlah bahwa Anda harus memberikan nama program yang tepat yang telah dimulai.

Misalnya, jika Anda menjalankan vi dan menjalankan pidof vimAnda tidak akan mendapatkan hasil yang benar.

Lihat pidofhalaman manual untuk info lebih lanjut.


Ini tidak diinstal secara default. Mungkin ada dalam paket sysvinit-utils.
flickerfly

Saya mendapat MariaDB. pidof mysqldmengembalikan PID. Namun, jika saya mengetik pidof Mariadbtidak ada yang dikembalikan. Apakah PID yang sama untuk MariaDB dan MySQL?
Pathros

18

Saya merasa senang menggunakan pencarian case yang tidak sensitif dengan menambahkan "-i" dan menggunakan "aux" alih-alih "kapak" untuk mendapatkan hasil yang lebih deskriptif:

ps aux | grep -i firefox

Jika Anda ingin mematikan semua proses yang dapat Anda gunakan:

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9

Itu adalah pembunuhan yang kuat. Jatuhkan "-9" jika Anda ingin membunuh dengan lembut.


5
Ini juga membunuh ps aux | grep -i firefox...prosesnya, karena itu mengandung teks firefoxdalam perintahnya!
Eric

1
@ Eric Anda bisa menggunakan grep -i firefo[x]hanya cocok firefox
AD

@ john-Foley tidak pernah menyarankan untuk menggunakan -9dengan kill, lihat di sini untuk penjelasan
AD

3

Jika Anda hanya ingin pid (berguna untuk skrip autokill, dll ...)

pgrep -f desired_program_name

1

Bagi mereka yang menjalankan Ubuntu 16.04 LTS, Anda harus menggunakan ps axdan tidak hanyaps pada baris perintah, jika tidak, Anda hanya akan mendapatkan proses pemijahan dari instance terminal tertentu tempat Anda berada. (Biasanya hanya 'bash' [shell Anda berada di ] dan 'ps' [apa yang baru saja Anda berlari])


Saya suka ps -e(menunjukkan semua) dan ps -ejH(menunjukkan pohon proses).
Andrew

1
@Andrew bagus, itu sebenarnya cukup manis - terima kasih atas tipnya
cygnus_x1

0

Anda juga dapat membuka terminal lain (atau beralih ke tty lain) dan menjalankan top, yang pada dasarnya adalah versi teks dari Monitor Sistem. Kolom pertama berisi daftar PID dari setiap proses yang berjalan, yang dapat Anda bunuh dengan menekan K, memasukkan PID dan kemudian memasukkan sinyal numerik untuk dikirim.


0

Anda bisa melakukannya:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

dua pipa pertama mendapatkan info proses, selanjutnya kita mencoba untuk mendapatkan kolom PID dengan menggunakan potongan old-school dan kemudian kita memberikan PID yang dihasilkan untuk dimatikan.


kill -9adalah senjata terbesar yang harus kamu bunuh dalam suatu proses. Anda harus mencoba sinyal yang lebih lembut pada awalnya sebelum beralih ke SIGKILL untuk memberikan proses kesempatan untuk membersihkan sumber dayanya.
Byte Commander

Itu benar @ByteCommander. Saya ingin menjadikannya liner satu yang akan menyelesaikan pekerjaan.
Arian Soltani

0
top

atau

screen -list|ls

daftar semua pid dengan proses yang sesuai

kill -[pid]
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.