Linux’taki Süreci Sonlandırmak İçin Pkill ve Killall Komutlarını Kullanma Kılavuzu
Linux İşletim Sistemi bir işlemi sonlandırmak için kill komutuyla birlikte gelir. Komut, büyük bir değişiklik / güncelleme işleminden sonra yeniden başlatmaya gerek kalmadan sunucuyu çalıştırmaya devam etmeyi mümkün kılar. İşte Linux’un büyük gücü buradan gelmektedir ve bu nedenle Linux sunucuların % 90’ında kullanılmaktadır.
Kill komutu, bir işlem için özel olarak belirtilen bir sinyal gönderir. Kill komutu, doğrudan veya bir kabuk komut dosyasından birkaç farklı şekilde çalıştırılabilir.
Kill komutunun ortak sözdizimi:
# kill [sinyal veya seçenek] PID (ler)
Bir kill komutu için bir Sinyal Adı şöyle olabilir:
Sinyal Adı Sinyal Değeri Davranışı SIGHUP 1 Hangup SIGKILL 9 Sinyali Öldür SIGTERM 15 Sonlandır
Açıkça SIGTERM yukarıdaki davranıştan bir süreci öldürmenin varsayılan ve en güvenli yoludur. SIGHUP , SIGTERM olarak bir süreci öldürmenin daha az güvenli bir yoludur. SIGKILL , yukarıdakiler arasında en güvenli olmayan yöntemdir, çıktıların kayıt edilmesini beklemeden işlemi sonlandırır.
Bir süreci öldürmek için, işlem kimliğini(PID) bilmemiz gerekir. Bir program başlatıldığında, otomatik olarak bu süreç için benzersiz bir işlem kimliği (PID) oluşturulur.
Linux’taki her sürecin bir işlem kimliği(PID) bulunur . Linux Sistemi önyüklendiğinde başlayan ilk süreç – init sürecidir , bu nedenle çoğu durumda ‘ 1 ‘ değerine atanır.
Init , ana süreci oluşturduğu için bu komutla sonlandırılamaz, dolayısı ile ana sürecin yanlışıkla sonlandırılması önlenmiş olmaktadır. Init , kendisini ancak bilgisayarın kapatılması durumunda sonlandırmaya izin verecek şekilde tasarlanmıştır.
Bilgisayarınızdaki tüm süreçleri ve onlara bağlı işlem kimliklerini öğrenmek için PS komutunu kullanabilirsiniz.
# ps -A
Örnek çıktı
PID TTY TIME CMD 1 ? 00:00:01 init 2 ? 00:00:00 kthreadd 3 ? 00:00:00 migration/0 4 ? 00:00:00 ksoftirqd/0 5 ? 00:00:00 migration/0 6 ? 00:00:00 watchdog/0 7 ? 00:00:01 events/0 8 ? 00:00:00 cgroup 9 ? 00:00:00 khelper 10 ? 00:00:00 netns 11 ? 00:00:00 async/mgr 12 ? 00:00:00 pm 13 ? 00:00:00 sync_supers 14 ? 00:00:00 bdi-default 15 ? 00:00:00 kintegrityd/0 16 ? 00:00:00 kblockd/0 17 ? 00:00:00 kacpid 18 ? 00:00:00 kacpi_notify 19 ? 00:00:00 kacpi_hotplug 20 ? 00:00:00 ata/0 21 ? 00:00:00 ata_aux 22 ? 00:00:00 ksuspend_usbd
‘ Pidof süreç_adı ‘ şeklinde verilen bir komut ile çıktıyı özelleştirmenizde mümkündür.
# pidof mysqld
Örnek çıktı
1684
Yine benzer bir şekilde sürece ait işlem kimliğini aşağıdaki şekilde de elde edebiliriz.
# ps aux | Grep MySQL
Örnek çıktı
root 1582 0.0 0.0 5116 1408 ? S 09:49 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 1684 0.1 0.5 136884 21844 ? Sl 09:49 1:09 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock root 20844 0.0 0.0 4356 740 pts/0 S+ 21:39 0:00 grep mysqld
Ama önce kill komutunu kullanmadan dikkat edilmesi gereken bazı önemli noktalara göz atalım:
- Bir kullanıcı tüm süreçlerini öldürebilir.
- Bir kullanıcı başka bir kullanıcının sürecini öldüremez.
- Kullanıcı sisteme ait bir süreci sonlandıramaz.
- Kök kullanıcı(root) Sistem düzeyinde işlemi ve herhangi bir kullanıcının işlemini öldürebilir.
Aynı işlevi gerçekleştirmenin başka bir yolu ‘ pgrep ‘ komutunu çalıştırmaktır.
# pgrep mysql
Örnek çıktı
3139
Sürece ait işlem kimliğini (PID) elde ettiğimize göre artık sonlandırabiliriz:
kill -9 3139
Yukarıdaki komut, işlem kimliği (PID) = 3139 olan süreci öldürür; buradaki PID , işlemin Sayısal Değeridir .
Aynı işlevi yerine getirmenin başka bir yolu olarak yeniden yazılabilir.
# kill - SIGTERM 3139
Peki sürecin adını kullanarak, süreci sonlandırmaya ne dersiniz?
Burada dikkat edilmesi gereken nokta doğru işlem adını yazmanız gerektiğidir, aksi takdirde yanlış bir süreci sonlandırıp işleri karmaşık bir hale getirebilirsiniz.
# pkill mysqld
Bir seferde birden fazla sürecei sonlandırmak için aşağıdaki komut yardımınıza koşacaktır
# kill PID1 PID2 PID3 veya
# kill -9 PID1 PID2 PID3 veya
# kill-SIGKILL PID1 PID2 PID3
Bir sürecin çok fazla örneği ve çok sayıda alt süreci varsa, ‘ killall ‘isimli bir komutumuz var. Bu, tüm süreçleri bir defada sonlandırmayı sağlar.
Kullanım Şekli:
# killall [sinyal veya seçenek] Süreç Adı
Tüm mysql örneklerini alt süreçlerle birlikte sonlandırmak için aşağıdaki komutu kullanın.
# killall mysqld
Aşağıdaki komutlardan herhangi birini kullanarak işlemin çalışıp çalışmadığını her zaman kontrol edebilirsiniz.
# service mysql status # pgrep mysql # ps -aux | Grep MySQL Yazının orijinaline buradan ulaşabilirsiniz.