İşlemi durduramıyorsanız öldürün! ☠

Hiç komut satırında bir işlemi kontrol edemediğiniz veya bir işlemin arka planda çalıştığını ve çalışırken başka bir işlemin çalışmasını engellediğini gördünüz mü? Bir kaç örnek vermek gerekirse…

İşlemcimizi ağlatan bir işlem var ise…

Çoğu işletim sisteminde görev yöneticisi ve ya işlem günlüğü yazılımları olabilir ama desktop ortamı olmayan bir sunucu ve ya ARM sistemi üzerinde çalışıyorsanız ve performansınızda sıkıntı var ise CPU veya RAM tavan yapmış olabilir. Bunu kontrol etmek için elinizdeki tek araç terminal ise aşağıdaki komutu çalışarak işlemi keşfedin.

$ ps aux | sort -nrk 3,3 | head -n 5
  USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
  murat 20114 11,0 3,2 4061224 271376 ?? S 11:03AM 32:43.64 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
  murat 345 9,6 1,2 2732028 98852 ?? S Çar09PM 0:56.41 /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder
  murat 675 7,9 1,1 2897048 92412 ?? S Çar09PM 4:42.08 /Applications/iTerm.app/Contents/MacOS/iTerm2
  root 145 4,3 0,2 2533492 15232 ?? Ss Çar09PM 0:03.21 /usr/libexec/sandboxd
  murat 4433 3,0 1,8 4392676 146992 ?? S Çar11PM 3:46.67 /Applications/Dropbox.app/Contents/MacOS/Dropbox /firstrunupdate 416

ps komutu sistemde o an çalışan tüm işlemlerin bir raporunu verir. Detaylı bilgi için —buraya— bakabilirsiniz. Sonrasındaki tüm açıklamalarım için yine explainshell.com üzerinde komutları tüm parametreleri ile birlikte inceleyebilirsiniz. ps den dönen işlemleri sort ile üçüncü sütun olan %CPU ya göreazalan şekilde sıraladık. head ile de ilk beş satırı çektik. Benim örneğimde görünene göre en şuan işlemcimi en çok Google Chrome yoruyormuş. ps den dönen PID(Process ID) sütununundan işlemin kimlik numarasını kill komutunu kullanarak aşağıdaki gibi öldürebiliriz.

$ kill -9 20114

Ve Chrome seve seve kapanmış olacaktır. kill komutu için de explainshell den bir inceleme yapmanızı tavsiye ederim. Neden - 9 diye merak ederseniz; kill komutu ilk parametre olarak bir sinyal talep eder. Sinyal listesini ‘-l‘ ile sinyal listesini görebilirsiniz.

Çalıştıracağınız işlem için gerekli portu başka bir işlem kullanıyor ise…

Misal bir uygulamanızı 4567 portunda çalıştırmak istiyorsunuz ve aşağıdaki gibi bir hata aldınız.

  Address already in use - bind(2) for "::1" port 4567 (Errno::EADDRINUSE)

Ve işin kötüsü bu portu hangi işlem kullanıyor bilmiyorsunuz. Öğrenmesi kolay;

$ lsof -i TCP:4567
  COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  ruby 55288 murat 46u IPv6 0xbdcabf29cd62e2b9 0t0 TCP localhost:tram (LISTEN)
  ruby 55288 murat 47u IPv4 0xbdcabf29d5a87861 0t0 TCP localhost:tram (LISTEN)

Yukarıda gördüğünüz gibi bu portu ruby kullanıyormuş ve PID(Process ID) 55288 imiş. Bu işlemi de aynı bir önceki örnekteki gibi kill komutu ile öldürebilirsiniz.