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

117

Saya menjalankan program di terminal yang tidak dapat saya hindari Ctrl- Cdan saya ingin membunuh. Bagaimana saya bisa menemukan PID-nya?

Jjed
sumber
1
Ini adalah cabang dari Apa yang harus saya lakukan ketika Ubuntu membeku? sebagai referensi untuk mencegah perincian dalam pertanyaan itu menjadi terlalu teknis.
Jjed
Ada perintah pidof .
neverMind9

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

Jjed
sumber
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.

Prabhat Kumar Singh
sumber
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.

pekerjaan
sumber
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.

John Foley
sumber
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
MikeL
sumber
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])

cygnus_x1
sumber
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.

Waldir Leoncio
sumber
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.

Arian Soltani
sumber
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]
Rakly3
sumber