Saya menjalankan program di terminal yang tidak dapat saya hindari Ctrl- Cdan saya ingin membunuh. Bagaimana saya bisa menemukan PID-nya?
Saya menjalankan program di terminal yang tidak dapat saya hindari Ctrl- Cdan saya ingin membunuh. Bagaimana saya bisa menemukan PID-nya?
Jawaban:
Buka terminal lain dan jalankan di ps ax | grep foo
mana 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 grep
dirinya sendiri.
Untuk menghentikan proses yang menyinggung, lakukan: di
kill pid
mana pid adalah ID Proses program. Anda mungkin harus menggunakan penilaian Anda tentang pertandingan mana yang perlu kill
diedit, atau Anda bisa menggunakannya top
. Menggunakan kill
dengan 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 pid
atau 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
kill -9
merupakan saran buruk. Saya telah mengedit jawaban untuk memperbaikinya.
ping
perintah dan sleep
. Menurut unix.stackexchange.com/a/275826/72988 , tidak mungkin di Ubuntu tanpa multiplexer
.
Saya tidak berpikir ada kebutuhan seperti perintah panjang ketika Anda dapat menyelesaikan perintah yang sama dengan pgrep, pkill, pidof dll ...
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
-f
flag: Mencari flag process_name (lihat man pkill)
-o
: Pilih hanya yang tertua dari proses yang cocok.
-n
flag: Pilih hanya yang terbaru dari proses pencocokan.
-l
flag: Daftar nama proses serta ID proses.
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 vim
Anda tidak akan mendapatkan hasil yang benar.
Lihat pidof
halaman manual untuk info lebih lanjut.
pidof mysqld
mengembalikan PID. Namun, jika saya mengetik pidof Mariadb
tidak ada yang dikembalikan. Apakah PID yang sama untuk MariaDB dan MySQL?
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.
ps aux | grep -i firefox...
prosesnya, karena itu mengandung teks firefox
dalam perintahnya!
grep -i firefo[x]
hanya cocok firefox
Bagi mereka yang menjalankan Ubuntu 16.04 LTS, Anda harus menggunakan ps ax
dan 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])
ps -e
(menunjukkan semua) dan ps -ejH
(menunjukkan pohon proses).
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.
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 -9
adalah 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.