Linux dışında bir kullanıcı dışındaki tüm işlemleri sonlandırmak


6

Uzak bir sunucuda bir ekran oturumu altında bazı işlemler çalıştırıyordum. Tüm bu süreçleri öldürmeye çalıştığımda:

pkill -U tim

öldürmek istemediğimler de dahil tüm işlemlerim öldürülüyor (yani ekran ve ssh bağlantısı).

Ekran ve ssh bağlantısı dışındaki tüm işlemlerimi öldürmenin bir yolu var mı?

Yanıtlar:


12

Çok hackerish:

ps -U tim | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill

Bu ssh veya ekran işlemlerinden başka her şeyi öldürür. İşte açıklanan komutlar:

  • ps -U tim - Açıkçası, kullanıcı timinden her işlemi listeleyecek
  • egrep -v "ssh|screen" - ssh veya ekran işlemleriyle satırları kaldıracak
  • cut -b11-15 - 11-15 sütunlarındaki verileri keser (genellikle PID'nin bulunduğu yer burasıdır)
  • xargs -t kill - tüm işlem kimliklerini kill komutuna geçirecek

Buna daha fazla alışkınsanız, awk'yi de kullanabilirsiniz.

ps -U tim | egrep -v "ssh|screen" | awk '{print $2}' | xargs -t kill

2

İçinde farkında olduğum hiçbir şey yok. Bunun gibi bir komut dosyası oluşturabilirsiniz:

#!/bin/bash
ps ux | sed -e '/bash/d' -e '/screen/d' | awk '{print $2}' | while read process
do 
  kill $process
done

Öldürmekten kaçınmak istediğiniz başka işlemler varsa, daha fazlasını eklemeniz gerekir.

-e '/processname/d'

sed kısmına girişler. Muhtemelen halletmek için daha temiz bir yol var, ama bu işe yarayacak.


Evet. -E '/ login / d' ekleyebilir ve -e '/ bash / d' komutunu kaldırabilirsiniz. O zaman root FS'yi RO olarak da yeniden ayarlayabilirsiniz. Demek istediğim, X11 dışı root terminalindeyken. Not: Eğer X11'deyseniz, önce oturumu kapatın.
user1742529

1

Tüm süreçlerinizi çok fazla öldürüyorsanız, neden bunu yapmanız gerektiğini araştırmak isteyebilirsiniz ... ama hey, bu tamamen bir şeyler yapmakla ilgili değil , bir şeyler yapmakla ilgili değil .

Kolay çözümlerden biri iki kullanıcı kimliği kullanmaktır ... biri ekran, SSH bağlantınız, diğeri ise bir noktada öldürmek istediğiniz tüm işlemler için.

Bu "hacker" ın ötesinde ve sadece düz "hack" e giriyor, ancak "connect" kullanıcısı olarak çalıştırdığınız DİĞER programların, diğer işlemleri kapattığınızda öldürülmemesi gibi bir avantajı da var. Bu, hata günlüklerinin "kuyruklarını" ve etrafta bırakmak isteyebileceğiniz şeyleri içerebilir.

Bu yardımcı olur umarım!


Uzak sunucu için iki kullanıcı kimliğiniz mi var? Merak ediyorum, köke geçmeden kendim için bir tane daha yapabilir miyim?
Tim

1

Deneyin:

ps aux | grep ^$LOGNAME | egrep -v 'ps aux|-bash|sshd' | awk '{ print $2 }' | xargs kill -9; ps aux | grep $LOGNAME

0

@RoyRico yaklaşımını kullandım - itibarı olmadığı için bu yazıya yorum yapamıyorum - ve sistemime uyarladım. Bazı farklı konfigürasyonlar nedeniyle, bir rafta çalışmadı.

ps -U myUserName | egrep -v "ssh|screen|grep|bash|systemd|(sd-pam)|ps" | awk '{print $1}' | tail -n +2 | xargs -t kill

Öldürmek istemediğim daha fazla süreci dışladım. İkincisi, PID'ler ilk sütuna girmiştir, bu nedenle önceki 'cut' komutu tamamen yanlış bir şekilde yerleştirilmiştir (hacker çözümü olarak tamamen normal ve kabul edilebilir bir şey); Üçüncüsü, grep'ing yaparken kuyruk çizgisi olarak çıkardığım baş çizgisi olarak bir "PID" ye sahiptim.


0

Mevcut cevaplara eklemek için, aşağıdaki benim için çalıştı.

  • PID, makinemdeki ilk sütunda görünüyor, bu nedenle b1-6
  • Başka bir poster gibi ben de komutta kullanılan işlemlerin adlarını ekledim, aksi halde kill komutunda ele alınabilir.
  • Başlığı kaldırmak için yok sayma listesine PID'yi ekleyin
  • Dahil --no-run-if-emptyetmek xargsseçeneği ise ekrana yazma yardım bastırır xargsyani boş olmak biter. işlem bulunamadı.
  • Bunu bir bash betiğine koyarsanız bash, yoksayılan komutlar listesine bash betiğinin adını da ekleyin !

    ps -U myUserName | egrep -v "ssh|screen|PID|ps|grep|cut|xargs|kill" | cut -b1-6 | xargs -t --no-run-if-empty kill

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.