ctrl+ Olduğunu biliyorum c, ama bazen işe yaramaz. Ubuntu masaüstünde sadece terminal penceresini kapatabilir ve bu olduğunda yeni bir pencere açabilirim, ancak bu Ubuntu sunucusundaki CLI kullanılarak (kutuyu yeniden başlatmadan) nasıl çözülebilir?
ctrl+ Olduğunu biliyorum c, ama bazen işe yaramaz. Ubuntu masaüstünde sadece terminal penceresini kapatabilir ve bu olduğunda yeni bir pencere açabilirim, ancak bu Ubuntu sunucusundaki CLI kullanılarak (kutuyu yeniden başlatmadan) nasıl çözülebilir?
Yanıtlar:
CTRL+CSIGINTuygulamaya gönderir . Uygulama bu sinyal için bir işleyici yapılandırabilir veya sinyali yoksayabilir. Varsayılan olarak işleyici yoktur ve SIGINTuygulamayı öldürür.
CTRL+\Hangisini göndereceğinizi kullanabilirsiniz SIGQUIT. Çekirdek sınırı sıfır değilse, bu da bir çekirdek dökümü oluşturur.
Süreci askıya alabilir ve ile kabuğa geri dönebilirsiniz CTRL+Z, bu işlemin yürütülmesini durduracak ve kabuk istemine geri dönecektir. İşlem bellekte olacak ve geçerli kabukta bir iş olarak kullanılabilecek. Daha sonra bu işe sinyal göndermek için kill -SIGNAL %%veya düğmesini kullanabilirsiniz kill -SIGNAL %<job_ID>. Örneğin, son iş kullanımını öldürmekkill -9 %%
Hiçbiri çalışmıyorsa, her zaman SIGTERMson çare olarak gönderebilirsiniz , SIGKILLbu da herhangi bir işlemi sonlandıracaktır. Diğer tüm sinyaller gibi bu sinyal, durdurmaya çalıştığınız işlemle aynı kullanıcı olarak veya kök olarak gönderilmelidir. Göndermek için SIGKILLöncelikle birlikte süreç bulmak, prosese ps auxveya ps -edfsonra çalıştırın kill -SIGKILL <process_ID>nerede <process_ID>olduğu PIDsütun psçıkışı.
İşlem kesintisiz bir çağrıdaysa sinyaller iletilemez. Kesintisiz aramalar, durdurulamayan ve genellikle kötü bir sürücü (örn . Yeniden girmeyen bir sürücü) nedeniyle gerçekleşebilen çekirdek işlevleridir . Kesintisiz uyku durumunda olan bir işlem , çağrı tamamlanana veya sunucu yeniden başlatılana kadar durdurulamaz.
Bir işlem bir zombi haline gelirse , yalnızca işlem tablosunda yer kaplayan kaynakları kullanmaz. Bir zombi işlemi sinyal alamaz.
Mevcut mimari için sinyal listesi şu adreste bulunabilir: kill -l
Adam sayfalarına bakın kill, psve bash. Bir adam sayfasını görmek için aşağıdakine benzer bir şey kullanın:man ps
Eğer tam konsol erişiminiz varsa, yapabileceğiniz Alt- F1..12ve yeni bir konsol olsun.
Oradan, aşağıdaki gibi bir işlem listesi yapabilirsiniz:
ps aux | grep <process-name>
Ardından killişlem kimliğinde bir:
kill -9 <pid>
Tam konsol erişiminiz yoksa, başka bir terminal penceresi açın (belki PuTTY veya benzeri bir yöntemle) ve yukarıdaki işlem listesini yapın ve adımları öldürün.
Ctrl C çalışan işleminize bir SIGINT gönderir. Başka bir konsol açmak istemiyorsanız, Ctrl \ ile bir SIGQUIT gönderebilirsiniz. Bu, SIGINT'in yapmadığı günlük uygulamaların çoğunu ele alacaktır.
Şahsen bir kısayol ile SIGKILL göndermenin bir yolunu istedim ama bunu yapmanın bir yolunun farkında değilim.
Ben düşünün pgrepve pkilldaha kullanımı daha kolay olması için killaçık bir süreç kimliği ile.
Ayrıca, sinyal 9 (SIGKILL) ile başlamak yerine, varsayılan SIGTERM (15) ile başlamayı düşünün. Bu, sürece zarif bir şekilde sonlandırma şansı verecektir (eğer yapabilirse).
pkill -15 thingve pkill thingeşdeğer olmalıdır.
İşte böyle çalışacak. Diyelim ki ntpd asılı.
Süreçler nelerdir? (Yanlış pozitif olmayacağına inanıyorsanız pkill'e atlayabilirsiniz).
$ pgrep -fl ntp
1034 /usr/sbin/ntpd
1037 /usr/sbin/ntpd
Süreçleri öldürün:
$ pkill ntpd
pgrepBaşarılı olup olmadığını görmek için tekrar kullanın .
Değilse, sonunda adresine geçin pkill -9.
Yeni bir terminale geçersiniz, sıkışmış işlemin PID'sini bulursunuz (kullanarak ps), sonra killişlemi öldürmek için kullanın . İlk olarak kullanırdım kill (PID). Bu işe yaramazsa, kullanırdım kill -9 (PID). Bu işlemi durdurmazsa, makinenin yeniden başlatılması gerekir.